我很困惑为什么我为我的程序获得以下输出:
-- test.hs
f :: Int -> [[Int]]
f 0 = []
f x = do
y <- [0, 1]
g <- f (x - 1)
return (y : g)
main :: IO ()
main = print $ f 2
我希望这个程序的输出是
[[0, 0], [0, 1], [1, 0], [1, 1]]
然而,我得到的只是
$ ghc -o test test.hs && ./test
[]
有什么想法吗?
答案 0 :(得分:10)
尝试
f 0 = [[]]
看起来f x生成长度为x的按位组合,因此f 0必须包含长度为0的序列,即空列表。