Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想知道这个函数在Haskell中是如何工作的_Haskell - Fatal编程技术网

我想知道这个函数在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
    作为列表的前缀。