7
我读西蒙·汤普森的的Haskell:函数式编程的工艺,我想知道是如何工作的:Haskell函数如何使用列表理解工作计算排列?
perms [] = [[]]
perms xs = [ x:ps | x <- xs , ps <- perms (xs\\[x]) ]
我似乎无法把握perms(xs\\[x])
应如何发挥作用。两个元素的列表的跟踪显示:
perms [2,3]
[ x:ps | x <- [2,3] , ps <- perms ([2,3] \\ [x]) ] exe.1
[ 2:ps | ps <- perms [3] ] ++ [ 3:ps | ps <- perms [2] ] exe.2
...
如何从exe.1
去exe.2
?
为什么downvote? – 2010-08-07 22:21:26
你知道吗,我是个白痴。这是我见过的关于列表理解的第一个跟踪。跟踪显示列表中的所有元素一次创建一个。我不知道为什么我认为第三行是要创建的列表的第二个元素。 – 2010-08-07 22:46:57