【发布时间】:2012-11-25 18:11:21
【问题描述】:
假设有一个 erlang 列表列表:
请注意,列表的大小是固定的。在这种情况下 3.
A = [[1,2,3],[4,5,6],[1,8,3],[1,9,3]]
我正在尝试编写函数来删除所有[1,_,3] 形式的元素。
所以我的预期输出将是以下形式:[[4,5,6]]
我能想到的一个解决方案是可以使用的列表:dropwhile() 函数。
我在构造谓词函数时遇到问题。将每个元素转换为元组然后进行比较是否更容易?如果是这样,我没有适当的方法可以省略中间元素。
您能帮我找到解决方案吗?任何其他有效的方法也将受到高度赞赏。
提前致谢!
编辑: 问题扩展:
假设有两个erlang列表:
A = [[1,2,3], [2,3,4], [4,5,6]]
B = [[1,4,3], [4,7,6], [7,8,9], [4,9,7], ]
输出 F(A,B) = [[7,8,9], [4,9,7]]
F 被定义为一个函数,它从列表 B 中删除与列表 A 中第一个和第三个位置的任何一个元素匹配的所有元素。
在这种情况下,列表 B 中与 [1, _ ,3] 或 [2, _ , 4] 或 [4 , _ , 6] 匹配的所有元素都将从列表中删除以给出结果列表。
我正在努力写 F。
【问题讨论】:
-
到目前为止,您的谓词函数是什么样的?我想你会发现元组或列表非常相似。
-
到目前为止我最大的努力是,lists:filter(fun(X) -> {1,_,3} == erlang:list_to_tuple(X) end,A)。但是我收到了一个 _ unbound variable 错误。单个等于 (=) 仅在其为 false 时分配给变量,并且不返回 true 或 false。
标签: functional-programming erlang