Erlang与守卫的基本递归

Anc*_*end 0 erlang

我试图创建一个非常简单的递归函数来删除具有用户从列表中决定的特定值的所有元素.

在haskell我会使用警卫并做:

deleteAll_rec _ [] = []
deleteAll_rec del (x:xs) | del==x = deleteAll_rec del xs
                         | otherwise = x:deleteAll_rec del xs
Run Code Online (Sandbox Code Playgroud)

I am trying to code up an Erlang equivalent, however, I am not sure how to handle the otherwise case:

deleteAll_rec(_, []) -> [];
deleteAll_rec(DEL, [X|XS]) when DEL =:= X -> deleteAll_rec(DEL, XS).
Run Code Online (Sandbox Code Playgroud)

I was wondering if someone can demonstrate how this can be done?

Many thanks in advance!

rvi*_*ing 5

否则成为二郎一个单独的条款:

delete_all_rec(_, []) -> [];
delete_all_rec(Del, [Del|Xs]) ->
    delete_all_rec(Del, Xs);
delete_all_rec(Del, [X|Xs]) ->
    [X|delete_all_rec(Del, Xs)].
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用if类似的:

delete_all_rec(_, []) -> [];
delete_all_rec(Del, [X|Xs]) ->
    if Del =:= X ->
            delete_all_rec(Del, Xs);
        true ->
            [X|delete_all_rec(Del, Xs)]
    end.
Run Code Online (Sandbox Code Playgroud)

结果代码是相同的,但我认为第一个版本看起来更好.无论你将终止案例放在第一位还是最后一位都与本例无关,我宁愿把它放在最后.