我想知道这个函数在Haskell中是如何工作的
输入以下内容,结果为我想知道这个函数在Haskell中是如何工作的,haskell,Haskell,输入以下内容,结果为 bools :: Int -> [[Bool]] bools 0 = [[]] bools n = map (False:) bss ++ map (True:) bss where bss = bools (n-1) 我不确定'(False:)'和'(True:)'在这个函数中是什么意思 我不知道为什么结果会是这样 没有详细解释Haskell的文章,所以在这里问一个问题 感谢您回答我的问题。cons”函数(:)是列表的数据构造函数之一。Haskell实现了
bools :: Int -> [[Bool]]
bools 0 = [[]]
bools n = map (False:) bss ++ map (True:) bss
where bss = bools (n-1)
我不确定'(False:)'和'(True:)'在这个函数中是什么意思
我不知道为什么结果会是这样
没有详细解释Haskell的文章,所以在这里问一个问题
感谢您回答我的问题。cons”函数(:)
是列表的数据构造函数之一。Haskell实现了类似于链表的列表。列表有两个数据构造函数:
[]
;及[1,4,2]
这样的列表是1:(4:[])
的“缩写”,或者是规范形式的(:)1(:)4(:)2[])
使用,我们可以编写类似(1:)
的函数,它是(:)1
的缩写
因此,(False:)
表达式是(:)False
的缩写。它是一个函数,用于获取Bool
s的列表,并返回一个以False
开头,后跟给定列表元素的列表<另一方面,code>(True:)将在列表前面加上True
如果您因此调用bools 2
,则其计算结果将为:
[[False,False],[False,True],[True,False],[True,True]]
bools 2 = map (False :) bss ++ map (True :) bss
where bss = bools 1
此处bools 1
将计算为:
[[False,False],[False,True],[True,False],[True,True]]
bools 2 = map (False :) bss ++ map (True :) bss
where bss = bools 1
bools
函数的第一个子句指定bools 0=[[]]
,这意味着bools1
是:
bools 1 = map (False :) bss ++ map (True :) bss
where bss = bools 0
因此,这等于:
bools 1 = map (False :) [[]] ++ map (True :) [[]]
bools 2 = [[False, False], [False, True]] ++ [[True, False], [True, True]]
因此:
bools 1 = [[False]] ++ [[True]]
对于bools 2
,我们因此获得:
bools 1 = [[False], [True]]
因此,我们在map(False:)
表达式中的列表前加False
,并在map(True:)
表达式中的列表前加True
:
bools 2 = map (False :) [[False], [True]] ++ map (True :) [[False], [True]]
因此等于:
bools 1 = map (False :) [[]] ++ map (True :) [[]]
bools 2 = [[False, False], [False, True]] ++ [[True, False], [True, True]]
它分别用
True
和False
作为列表的前缀。