【发布时间】:2016-03-10 12:09:46
【问题描述】:
我正在尝试用 Erlang 编写简单的通讯录。我已经开始了:
-record(entry, {name, surname, phone, email}).
createAdressBook() -> [].
addContact(Name, Surname, AdressBook) ->
case isAlready(Name, Surname, AdressBook) of
false -> [#entry{name = Name, surname = Surname}|AdressBook];
_ -> {error, "This entry already exists"}
end.
isAlready(_, _, []) -> false;
isAlready(Name, Surname, [#entry{name = Name, surname = Surname}|_]) -> true;
isAlready(Name, Surname, [_|T]) -> isAlready(Name, Surname, T).
但是,过了一段时间,我决定把名字和姓氏放在一起。将代码更改为以下代码后会引发编译错误(new isAlready/3 第二行中的非法模式。
-record(entry, {person, phone, email}).
createAdressBook() -> [].
addContact(Name, Surname, AdressBook) ->
case isAlready(Name, Surname, AdressBook) of
false -> [#entry{person = Name ++ " " ++ Surname}|AdressBook];
_ -> {error, "This entry already exists"}
end.
isAlready(_, _, []) -> false;
isAlready(Name, Surname, [#entry{person = Name ++ " " ++ Surname}|_]) -> true;
isAlready(Name, Surname, [_|T]) -> isAlready(Name, Surname, T).
我做错了什么以及为什么要检查 string1 + " " + string2 是否是列表的头部?
【问题讨论】:
标签: erlang