【发布时间】:2010-08-07 22:15:54
【问题描述】:
我正在阅读 Simon Thompson 的 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?
【问题讨论】:
-
你知道吗,我是个白痴。那是我看到的关于列表理解的第一个痕迹。跟踪显示要一次创建的列表的所有元素。我不知道为什么我认为第三行是要创建的列表的第二个元素。
标签: haskell permutation list-comprehension