function - 如何创建haskell排列

标签 function haskell boolean permutation

我想要做的是创建一个给定长度的函数,创建所有可能的真/假组合/排列

例如。 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/

相关文章:

javascript - 如何确保 if 循环在按顺序运行下一个 if 循环之前等待并接收结果

haskell - 通过对 Haskell 中二元函数的两个参数进行某种转换来实现 "lift up"的最惯用方法是什么?

c++ - 函数不接受 1 个参数 c++

java - 我的 boolean 值总是正确的

在 "is true"条件下退出的 Android 计时器线程

c - 获取整数位数

javascript - 损坏的代码?为什么它停止工作

javascript - 如何修复我的 js 绑定(bind)实现?

haskell - 类似 mapAccumR 的递归方案超过 Fix?

Haskell:重复函数(+)和(++),mappend