Fun을 사용하여 한 줄에이 절을 표시하는 방법.절을 Fun으로 변환
perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
Fun을 사용하여 한 줄에이 절을 표시하는 방법.절을 Fun으로 변환
perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
나는 당신이 찾고있는 것이 "자기 재귀"라고 생각한다.
재미있는 구문은 재미있는 본문 자체를 참조 할 수 없으므로 재미있는 호출이 매개 변수 인 곳에서 트릭을 사용해야합니다. 이것을 일반적으로 ycombinator라고합니다.
일부 예제 코드는 가능성이 더 잘 설명합니다 :
permutator() ->
fun
([], _F) ->
[[]];
(L, F) ->
[ [H|T] || H <- L, T <- F(L--[H], F)]
end.
do_permutate(L) ->
P = permutator(),
P(L, P).
이 매우 어색 볼 수 있듯이. 자신의 퍼머 (perms) 기능을 참조하고 싶다면 fun perms/1
코드를 사용할 수 있습니다.
나는 기독교와 비슷한 또 다른 대답을 얻었다.
5> Perms = fun(X) -> Fun = fun([],F) -> [[]]; (L,F) -> [[H|T] || H <- L, T <- F(L--[H],F)] end, Fun(X, Fun) end.
#Fun<erl_eval.6.13229925>
6> Perms("cat").
["cat","cta","act","atc","tca","tac"]
두 개의 절이있는 하나의 함수입니다. – Christian