Erlang中文论坛

标题: erlang中生成器和递归求助 [打印本页]

作者: high佬全    时间: 2015-1-29 01:21
标题: erlang中生成器和递归求助
这次轮到我要请求帮助啦,希望能有人能回答下我这个问题,到底下面这段函数的作用和运行次序是怎样的?
perms() ->
  [[]];
perms([X|Xs]) ->
  [inser(X,As,Bs)||Ps <- perms(Xs),{As,Bs} <- splits(Ps)].
splits([]) ->
  [{[],[]}];
splits([X|Xs] = Ys) ->
  [ {[] , Ys} | [{ [X | As] , Bs } || {As , Bs} <- splits(Xs) ] ].
insert(X,As,Bs) ->
   lists:append( [As , [X] , Bs] ).
希望有人能回答我吧!如果没有,那这次也当是留给将来的我来解!
而下面这段代码我就看得懂
qsort([]) -> [] ;
qsort([X | Xs]) ->
  qsort([Y || Y <- Xs, Y =< X]) ++ [X] ++ qsort([Y || Y <- Xs, Y > X]).
  大概是取头部作为支点,然后利用生成器 Xs分成两段列表(一段比X大,一段比X少),再分别递归这两段列表,最终得出一个从大到少的列表,就像c/c++快速排序的算法,大家不清楚可以百度下。







欢迎光临 Erlang中文论坛 (https://bbs.erldoc.com/) Powered by Discuz! X3.3