Haskell 置换函数
Haskell Permute Function
这是我在这个网站上的第一个问题。所以如果我粗鲁或不够正式,我已经很抱歉了。
在我的离散数学中 class 教授向我们展示了这个置换函数
permute :: [a] -> [[a]]
permute [] = [[]]
permute xs = [y:zs| (y,ys) <- select xs, zs <- permute ys]
select :: [a] -> [(a,[a])]
select [] = []
select (x:xs) = (x,xs) : map(\(y,ys) ->(y,x:ys))(select xs)
这部分我没看懂
permute xs = [y:zs| (y,ys) <- select xs, zs <- permute ys]
我试着permute [1]
理解清楚,在第一次递归中select xs
需要[1]
和returns [(1,[])]
。然后permute ys
取[]
如果我没记错的话
在第二次递归中,select
采用 []
和 returns []
。我在这里迷路了。正如我所见,它应该 return [[1],[]]
但它 returns [[1]]
.
如果有人帮助我,我会很高兴。
如果你调用 permute [1]
,那么 select [1]
将 return [(1, [])]
,这意味着列表理解将采用 y = 1
和 ys = []
。然后我们调用permute []
,其中returns [[]]
。因此,这意味着 zs
只会占用 zs = []
。因此,我们将产生 [ y : zs ]
等价于 [ 1 : [] ]
,因此 [[]]
.
所以由于 zs <- permute []
,因此等同于 zs <- [[]]
,这意味着它只迭代 一次 和 zs = []
。
如果你permute [1,2]
那么我们就这样调用select [1,2]
,而这个return就是[(1, [2]), (2, [1])]
。因此,这意味着在列表理解中,(y, ys)
将“迭代”两次:一次是 y=1
和 ys=[2]
;后来 y=2
和 ys=[1]
。对于 (y, ys)
的每个值,它将调用 permute
。 permute [1]
将 return [[1]]
,permute [2]
将 return [[2]]
。因此,这意味着我们将 return 一个包含以下内容的列表: [ 1 : [2], 2 : [1]]
因此相当于 [[1,2], [2,1]]
.
这是我在这个网站上的第一个问题。所以如果我粗鲁或不够正式,我已经很抱歉了。
在我的离散数学中 class 教授向我们展示了这个置换函数
permute :: [a] -> [[a]]
permute [] = [[]]
permute xs = [y:zs| (y,ys) <- select xs, zs <- permute ys]
select :: [a] -> [(a,[a])]
select [] = []
select (x:xs) = (x,xs) : map(\(y,ys) ->(y,x:ys))(select xs)
这部分我没看懂
permute xs = [y:zs| (y,ys) <- select xs, zs <- permute ys]
我试着permute [1]
理解清楚,在第一次递归中select xs
需要[1]
和returns [(1,[])]
。然后permute ys
取[]
如果我没记错的话
在第二次递归中,select
采用 []
和 returns []
。我在这里迷路了。正如我所见,它应该 return [[1],[]]
但它 returns [[1]]
.
如果有人帮助我,我会很高兴。
如果你调用 permute [1]
,那么 select [1]
将 return [(1, [])]
,这意味着列表理解将采用 y = 1
和 ys = []
。然后我们调用permute []
,其中returns [[]]
。因此,这意味着 zs
只会占用 zs = []
。因此,我们将产生 [ y : zs ]
等价于 [ 1 : [] ]
,因此 [[]]
.
所以由于 zs <- permute []
,因此等同于 zs <- [[]]
,这意味着它只迭代 一次 和 zs = []
。
如果你permute [1,2]
那么我们就这样调用select [1,2]
,而这个return就是[(1, [2]), (2, [1])]
。因此,这意味着在列表理解中,(y, ys)
将“迭代”两次:一次是 y=1
和 ys=[2]
;后来 y=2
和 ys=[1]
。对于 (y, ys)
的每个值,它将调用 permute
。 permute [1]
将 return [[1]]
,permute [2]
将 return [[2]]
。因此,这意味着我们将 return 一个包含以下内容的列表: [ 1 : [2], 2 : [1]]
因此相当于 [[1,2], [2,1]]
.