将子句转换为Fun

wea*_*ock 1 erlang

如何使用Fun在一行中表示此子句.

perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
Run Code Online (Sandbox Code Playgroud)

Chr*_*ian 7

我相信你所寻求的是一种"自我递归"的乐趣.

有趣的语法无法在有趣的体内引用自身,因此需要使用一种技巧,其中调用的乐趣是参数.这通常被称为ycombinator.

一些示例代码可能会更好地描述它:

permutator() ->
  fun 
    ([], _F) ->
      [[]];
    (L, F) ->
      [ [H|T] || H <- L, T <- F(L--[H], F)]
  end.

do_permutate(L) ->
  P = permutator(),
  P(L, P).
Run Code Online (Sandbox Code Playgroud)

你可以看到这很尴尬.如果你只是想参考你的perms函数,你可以使用代码:fun perms/1.