use*_*306 1 haskell list-comprehension
正如标题所说,我并没有完全理解哈斯克尔如何解释
1:[[]]
Run Code Online (Sandbox Code Playgroud)
它为什么这么做(1:[]):[]
?
E:我从以下方面得到了这个想法:
part'::[a] -> [[a]]
part' [] = [[]]
part' (x:xs) = p ++ [x:ys | ys <- p]
where p = part' xs
Run Code Online (Sandbox Code Playgroud)
具体来自 p ++ [x:ys | ys <- p]
例如part'[1]
:我的思路是否正确?:
part'[1] = (part'[]) ++ [1:ys | ys <- part'[]]
--> = [[]] ++ [1:[[]]]
Run Code Online (Sandbox Code Playgroud)
希望这说清楚.
好像你误解了[... | ys <- p]
语法.在这种情况下,ys
是列表中每个元素的替代p
,而不是整个列表.你问题的最后部分的等式推理应该是
part' [1] = (part' []) ++ [1:ys | ys <- p]
-- = [[]] ++ [1:ys | ys <- [[]]]
-- = [[]] ++ [1 : []]
-- = [[], [1]]
Run Code Online (Sandbox Code Playgroud)