尝试在 Erlang 中组合列表时出现问题
作为学习 Erlang 的练习,我正在尝试编写一个简单的数据库(来自 O'Reilly 的《Programming Erlang》)。
基本上我有一个像这样的元组列表:
Db1 = [{person1,charleston},{person2,charleston},{person3,chicago}].
我需要创建
db:match(charleston,Db1).
返回
[person1,person2]
的函数这是我编写的方法:
match(Element, Db) -> match(Element, Db, []).
match(_Element,[], Results) -> Results;
match(Element, [{Key,Value}|T], Results) ->
case Value == Element of
true -> match(Element, T, [Results,Key]);
false -> match(Element,T,Results)
end.
我得到的结果是这样的:
[[[],person1],person2]
我知道有一些方法可以将列表与列表结合起来。 erl 模块,但我试图绕过它,以了解有关该语言的更多信息。有什么想法我做错了吗?
As an exercise in learning Erlang, I'm trying to write a simple database (from O'Reilly's Programming Erlang).
Basically I have a list of Tuples like this:
Db1 = [{person1,charleston},{person2,charleston},{person3,chicago}].
I need to create function such that
db:match(charleston,Db1).
returns
[person1,person2]
Here's the method that I wrote:
match(Element, Db) -> match(Element, Db, []).
match(_Element,[], Results) -> Results;
match(Element, [{Key,Value}|T], Results) ->
case Value == Element of
true -> match(Element, T, [Results,Key]);
false -> match(Element,T,Results)
end.
The result I'm getting back is this:
[[[],person1],person2]
I know there are ways of combining lists with the lists.erl
module, but I'm trying to bypass it in an effort to learn more about the language. Any ideas what I'm doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你正在重新发明轮子。只需使用 列表理解:
You're re-inventing the wheel. Just use list comprehension:
问题在于如何构建列表,请尝试以下操作:
the problem is how you are building up your list, try this instead:
直接编写代码的另一种方法是
@Little Bobby Tables 解决方案中的列表理解与此等效。
An alternate way to write the code directly is
The list comprehension in @Little Bobby Tables solution is equivalent to this.