我想要做的是创建一个给定长度的函数,创建所有可能的真/假组合/排列
例如。 getPerm 2
应返回 [True,True,True,False,False,True,False,False]
getTrue 0 = []
getTrue size = (True:(getTrue (size-1)))++(True:(getFalse (size-1)))
getFalse 0 = []
getFalse size =(False:(getTrue (size-1)))++(False:(getFalse (size-1)))
getPerm 0 = []
getPerm size= (getTrue size)++(getFalse size)
我做错了..我是函数式编程的新手,所以请只使用基本的东西,不要使用奇怪的东西..尽量使代码尽可能简单,因为我对 haskell 还不太了解
最佳答案
getPerm n = concat $ replicateM n [True, False]
虽然它可能被称为“奇怪的东西”,但它并不太难。 [True, False]
表示列表单子(monad)中的非确定性选择。 replicateM
对这些选择的 n
次重复生成一个不确定的列表。由于您希望它们都在一个列表中,因此我们将它们连接起来以获得最终结果。
关于function - 如何创建haskell排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6187679/