2014-11-20 2 views
0

기록 사용 : 내가 호출 할 때오류 내가 주소록 시뮬레이션해야하는 간단한 프로그램 만든

%% API 
-export([]). 
-export([createAddressBook/0]). 
-export([checkIfExist/3]). 
-export([addContact/3]). 
-record(entry,{nameAndSurname,n_phone,email}). 

createAddressBook() -> 
    Test = #entry{nameAndSurname = {"Marcin", "Majewski"}, n_phone = [997], email=["[email protected]"]}, 
    [Test]. 

checkIfExist(_,_,[]) -> false; 
checkIfExist(Name,Surname,[H|L]) -> 
    if 
    H#entry.nameAndSurname == {Name,Surname} -> true; 
    true -> checkIfExist(Name,Surname,L) 
    end. 

addContact(Name,Surname,L)-> 
    case checkIfExist(Name,Surname,L) of 
    true -> io:format("Entry already exist, nothing was created!"); 
    _ -> newEntry = #entry{nameAndSurname = {Name,Surname}, n_phone = [],email = []},lists:append(L,newEntry) 
    end. 

을하지만 :

: 나는 오류를 얻고있다

X=module_name:createAddressBook(). 
B=module_name:addContact("Name","Surname",X). 

** exception error: no match of right hand side value 
{entry,{"Name","Surname"},[],[]} 
in function addContact 

이 문제의 원인을 이해할 수 없습니다.

+1

함수에서 성을 정의하는 것을 잊었으며 레코드 정의에 기본값이 없습니다. 이와 같은 질문을 우편 목록이나 포럼에 가져 오는 것이 좋습니다. – zxq9

+0

@ zxq9 그건 잊어 버렸지 만 문제를 해결하지는 못합니다. 왜 내가이 질문을하지 말아야합니까? –

+1

오타가 있거나 실수로 코드에 실수가있는 경우는 일반적으로 잘 수행되지 않습니다. 실제로 이러한 경우는 거의 대답을 얻지 못하지만 응답을받지 못했습니다. 때로는 이런 것들이 완전히 무시됩니다. IRC, 목록 또는 포럼에 이와 같은 것을 가져 오는 OTOH는 여기에서 찾을 수있는 것보다 더 많은 답변과 약간의 동정심을 거의 보장받습니다. – zxq9

답변

2

당신은 원자 레코드를 할당하려고 애 쓰고있다 : 소문자에서

newEntry = #entry{nameAndSurname = {Name,Surname}, n_phone = [],email = []},lists:append(L,newEntry) 

newEntry부터 시작, 얼랑 원자로 취급하지만, 변수가 없습니다. 그냥 변경하십시오 :

NewEntry = #entry{nameAndSurname = {Name,Surname}, n_phone = [],email]}, 
lists:append(L,NewEntry) 
+0

Ans 예, 전적으로 @ zxq9에 동의합니다.이 질문은 SO 형식과는 거리가 멀습니다. –

+0

누군가가 질문을 할 때 대답이 없으므로 오타가 아닌지 알 수 없다는 것을 잊지 마십시오. @Marcin에게 나는 오류 메시지를 자세히 살펴 보길 권한다. 문제를 해결하기 위해 알아야 할 거의 모든 것 : 오류 유형, 코드 줄, 오른쪽 가치 ... 내가 조언을 해줄 수 있다면, 한 줄에 여러 개의 표현식을 넣지 않아도 읽기 쉽고 디버깅 할 때 더 많은 정보를 얻을 수 있습니다. – Pascal

+0

@Pascal, 질문 *에 대한 귀하의 의견은 합리적입니다.하지만 똑같은 질문이 simllar ussue (정확히는 동일하지는 않음)와 마주 칠 수있는 사람들에게 더 유용한 다른 방법으로 공식화되어야한다고 생각합니다. –