haskell类型构造函数如何 - >有效

sie*_*osa 0 haskell

sublists [] = [[]]
sublists (x:xs) = [x:sublist | sublist <- sublists xs]
                    ++ sublists xs
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,有人可以解释一下[x:sublist | sublist <- sublists xs]这行的确切发生以及<-这种类型的构造函数到底是做什么的吗?

Cod*_*ice 5

这里没有类型构造函数.此语法称为列表推导.它基于数学的集合理解.列表推导给出了一个表达式来创建列表的元素.在这种特殊情况下,元素是使用表达式创建的x:sublist.sublist <- sublists xs表示sublist获取生成的列表中每个元素的值sublists xs.

如果您想在特定示例中查看其工作原理,可以使用替换原则.第一步看起来像这样:

sublists [1, 2, 3]
    = [1:sublist | sublist <- sublists [2, 3]] ++ sublists [2, 3]
Run Code Online (Sandbox Code Playgroud)

现在您需要sublists [2, 3]使用相同的想法进行评估.我会将此作为练习留给读者.(请注意,Haskell实际上会对此表达式进行两次评估.但是,手动执行此操作只是繁忙的工作而且完全浪费时间.一次评估它就足以了解这里发生的事情.)

  • @SAYALIKULKARNI我已经展示了如何评估这一点的第一步.我建议你自己完成剩下的工作.这是一个很好的练习,可以帮助您更好地理解函数式编程和递归. (2认同)