【发布时间】:2015-01-14 00:55:29
【问题描述】:
我创建了一个concatenate/1 函数,它应该连接列表和原子的列表:
concatenate(L)->
concatenate(L,[]).
concatenate([],R)->
reverse(R);
concatenate([H|T],R) when is_atom(H) ->
concatenate(T,[H|R]);
concatenate([[]|L],R)->
concatenate(L,R);
concatenate([[H|T]|L],R)->
concatenate([T|L],[H|R]).
但是我得到了错误:
15> ml:concatenate([[1,2],4,[3,4,5],[5,6]]).
** exception error: no function clause matching
ml:concatenate([4,[3,4,5],[5,6]],[2,1]) (ml.erl, line 27)
我认为 应该 匹配,因为第二个 concatenate/2 子句。
请问,我在这里做错了什么?
【问题讨论】:
-
你想完成什么?这里有两个正交的问题:列表形成和条件检查。为了得到一个干净的、更 Erlangish 的解决方案,我们需要从更高的层次更多地了解这个问题。 IOW,看来你有一个 XY 问题。
标签: function erlang pattern-matching