我有一个关于Erlang Perms实现的问题:
perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
Run Code Online (Sandbox Code Playgroud)
上面的代码来自一本名为Erlang Programming的书,它看起来非常简单但运行完美.我困惑的是它是如何工作的.例如,让我们用一个参数运行它perms("12"),然后如果我们分析递归的过程.我认为第一次回归的结果将是,[[1|perms[2]->[[2]|[[]]]]并且这等于[[1|[[2]|[[]]]].但它在Erlang shell中是一个错误的表达.
erlang ×1