设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19028|回复: 0
打印 上一主题 下一主题

erlang中生成器和递归求助

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-29 01:21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这次轮到我要请求帮助啦,希望能有人能回答下我这个问题,到底下面这段函数的作用和运行次序是怎样的?
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++快速排序的算法,大家不清楚可以百度下。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-11-22 01:06 , Processed in 0.332800 second(s), 10 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表