在 Haskell 中生成一组布尔变量的所有组合

2023-12-21

我正在尝试使用 Haskell 中的列表单子。我试图在给定指定布尔变量的字符串列表的情况下生成所有可能命题的列表。

例如调用:

mapM_ print $ allPropositions ["a","b"]

会产生以下结果:

[("a",True),("b",True)]
[("a",True),("b",False)]
[("a",False),("b",True)]
[("a",False),("b",False)]

我已经成功地使用列表理解和递归以及以下代码来做到这一点

allPropositions :: [String] -> [[(String,Bool)]]
allPropositions [] = [[]]
allPropositions (x:xs) = [(x,True):r | r <- allPropositions xs] ++ [(x,False):r | r <- allPropositions xs]

我正在寻找一种使用类似于以下代码片段的 do 表示法来完成此操作,但输入数量可变。有没有办法做到这一点(嵌套单子,...)?

allPropositions' = do
    a <- [True, False]
    b <- [True, False]
    return([("a",a),("b",b)])

你需要的是sequence :: Monad m => [m a] -> m [a].

特别是,对于[] monad, sequence获取一个列表n列出并产生所有n-length 列出一次从每个列表中绘制一个元素。

sequence [ [1,2,3], [4,5], [6] ] = 
   [ [1,4,6], [1,5,6], [2,4,6], [2,5,6], [3,4,6], [3,5,6] ]

这对您的特定情况有帮助,因为如果您有一个列表n字符串,您可以轻松地生成每个字符串的可能性:

map (\s -> [(s,True), (s,False)] ["a", "b", "c"] = 
   [ [("a", True), ("a", False) ]
   , [("b", True), ("b", False) ]
   , [("c", True), ("c", False) ]
   ]

现在您只需从每个列表中选择一个即可让您的命题为每个变量保存真值:

sequence (map (\s -> [(s,True), (s,False)] ["a", "b", "c"]) = 
   [ [("a", True), ("b", True), ("c", True)]
   , [("a", True), ("b", True), ("c", False)]
   , [("a", True), ("b", False), ("c", True)]
   , [("a", True), ("b", False), ("c", False)]
   , [("a", False), ("b", True), ("c", True)]
   , [("a", False), ("b", True), ("c", False)]
   , [("a", False), ("b", False), ("c", True)]
   , [("a", False), ("b", False), ("c", False)]
   ]

sequence (map f xs)这个词经常出现,所以有一个名字:

mapM f xs = sequence (map f xs)
-- or, point-free style
mapM f = sequence . map f

所以你想要的功能就是

allPropositions vs = mapM (\v -> [(v,True),(v,False)]) vs
-- or, equivalently
allPropositions = mapM (\v -> [(v,True),(v,False)])
-- or, equivalently
allPropositions = mapM $ \v -> [(v,True),(v,False)]
-- or, equivalently, with -XTupleSections
allPropositions = mapM $ \v -> map (v,) [True, False]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Haskell 中生成一组布尔变量的所有组合 的相关文章

  • 如何从namedtuple实例列表创建pandas DataFrame(带有索引或多索引)?

    简单的例子 from collections import namedtuple import pandas Price namedtuple Price ticker date price a Price GE 2010 01 01 30
  • 如何将列表转换为地图?

    最近我和一位同事讨论了转换的最佳方式是什么List to Map在 Java 中 这样做是否有任何具体的好处 我想知道最佳的转换方法 如果有人可以指导我 我将非常感激 这是个好方法吗 List
  • 如何将列表中的每个项目转换为字符串,以便连接它们? [复制]

    这个问题在这里已经有答案了 我需要加入一个项目列表 列表中的许多项目都是从函数返回的整数值 IE myList append munfunc 我应该如何将返回的结果转换为字符串以便将其加入列表 我是否需要对每个整数值执行以下操作 myLis
  • 终止 Julia 数组理解中的 For 循环

    我在 Julia 中有以下代码行 X i i 2 for i in 1 100 if i 2 5 0 基本上 它返回一个元组列表 i i 2 from i 1 to 100如果剩余的i 2 and 5为零 我想做的是 在数组理解中 跳出 f
  • cabal install wx 缺少 C 库

    Env 操作系统 feodra 16 Haskell 平台 wxGTK 开发 GHHC 7 0 4 我正在尝试安装 wxHaskell 阴谋集团安装wx 然后给出这些错误 缺少对外国库的依赖 缺少 C 库 wx baseu 2 8 wx b
  • 为什么Python中pop()的大O与pop(0)不同[重复]

    这个问题在这里已经有答案了 他们不应该都是O 1 因为从 Python 列表中的任何位置弹出一个元素涉及销毁该列表并在新的内存位置创建一个元素 蟒蛇的list实现使用动态调整大小的 Carray在引擎盖下 删除元素usually要求您移动后
  • 如何在Python中一次比较二维数组的2列与另一个数组的列

    我有两个字符串数组 每个数组有三列 我想比较两个二维数组的前两列 有 3 列和 4000 行 如果它们匹配 那么我需要那些匹配的值 但是我的代码不起作用 这是一个示例 array1 1stcolumn 2ndColumn 3rdColumn
  • 管道 - 将多个来源/生产者合并为一个

    我正在使用读取文件sourceFile 但我还需要在处理操作中引入随机性 我认为最好的方法是拥有一个这样的制片人 Producer m StdGen ByteString 其中 StdGen 用于生成随机数 我打算让生产者执行 source
  • 如何只修改记录的一个字段而不完全重写它? [复制]

    这个问题在这里已经有答案了 It s the second time I m tackling this problem And for the second time this is while working with the Stat
  • 你将如何在 Haskell 中(重新)实现迭代?

    iterate a gt a gt a gt a 你可能知道 iterate是一个接受函数和起始值的函数 然后它将函数应用于起始值 然后将相同的函数应用于最后的结果 依此类推 Prelude gt take 5 iterate 2 2 2
  • 使用 Haskell 绘制图表

    是否可以使用 Haskell 绘制一个简单的图表 你们中的任何人都可以告诉我该怎么做吗 该图应至少包含 3 个点 Haskell 图表 https github com timbod7 haskell chart似乎不错 The wiki
  • 如何从具有函数依赖关系的类型类中获取和使用依赖类型?

    如何从具有函数依赖关系的类型类中获取和使用依赖类型 为了澄清并给出我最近的尝试的一个例子 从我正在编写的实际代码中最小化 class Identifiable a b a gt b where if you know a you know
  • 为什么我不能声明推断类型?

    我有以下内容 runcount Eq a Num b gt a gt b runcount runcountacc 0 runcountacc Eq a Num b gt b gt a gt b runcountacc n runcount
  • 创建动态对象

    如何动态创建对象 string columnNames EmpName EmpID PhoneNo List
  • 如何使用包含 \n 的 .txt 创建一维列表?

    我想读取一个文本文件并将文件的每个元素放入一个列表中 而不是为文件中的每一行都有一个单独的列表 例如 如果文件是 你好我的名字 Is Joe 我希望列表是 你好 我的名字是 Joe 而不是 你好 我的名字 是乔 这是我到目前为止所拥有的 d
  • 存储整数列表的最有效方法

    我最近一直在做一个项目 其中一个目标是使用尽可能少的内存来使用 Python 3 存储一系列文件 除了一个整数列表之外 几乎所有文件都占用很少的空间 大致333 000整数长且整数可达约8000在尺寸方面 我目前正在使用pickle存储列表
  • 检索 Haskell 项目中所有导入的列表

    因此 我的最终目标是通过确保项目导入的所有实体都存在于其声称可以使用的版本中 来评估 cabal 文件中依赖项的准确性 一个好的开始是找到单个源文件使用的所有导入实体的列表 可选地包含有关它们来自何处的信息 我愿意暂时忽略类实例的情况 因为
  • Haskell Cabal:“包间接依赖于同一包的多个版本”

    清除我的所有后cabal installed 包 我运行了以下会话 cabal update Downloading the latest package list from hackage haskell org james bast c
  • 如何测试自定义 StateT 的 Monad 实例?

    我正在学习 Monad Transformers 其中一个练习要求实现 Monad 实例StateT 我想使用以下方法测试我的实现是否符合 Monad 法则validity https github com NorfairKing vali
  • 在ghci中,如何删除现有的绑定?

    我收到一个 绑定影响现有绑定 错误 类似于以下错误this https stackoverflow com questions 2902716 in haskell what does it mean if a binding shadow

随机推荐

  • 当应用程序处于后台时,单击通知时不会调用 fcm.onNotification()

    我已经安装了 cordova plugin fcm 除了一件小事外 一切正常 当应用程序处于后台 关闭并且从 firebase 发送推送通知时 通知会在设备中弹出 单击托盘中的该通知后 我的应用程序开始运行 但控件未进入 fcm onNot
  • 将 HTML 表导出到 Excel 时编码 UTF-8

    我正在尝试使用 javascript 将 HTML 表导出到 Excel 这是 JavaScript 代码
  • while 循环不会以逻辑条件终止

    如果我添加 OR 条件语句 该循环将不会终止 如果其中一个为假 那么它应该终止 全局变量 int x 100 char n malloc 64 void add void do printf Would you like to add 1
  • 100vw DIV 未显示全宽

    我正在努力让灰色div id ex home bottom container 朝向本页底部http patrickbaker biz starter d http patrickbaker biz starter d 整页的宽度 这意味着
  • 在 woocommerce_get_price_html 挂钩中的价格后添加多语言文本

    我正在构建一个 WooCommerce 网站并对其进行自定义 从互联网库复制并粘贴代码 我已成功在 woocommerce 产品中添加 自定义价格和自定义文本 以便可以将它们翻译成不同的语言 这是产品页面的外观 https www prim
  • 从 Internet 下载 URL 中具有特定日期时间的图像

    我正在尝试开发一个应用程序 该应用程序将使用生成的 Url 路径从 Web 服务器获取文件 网络服务器上每秒都会创建一个新文件 我正在尝试访问该文件并将其显示在 PictureBox 中 旧文件不会被删除 我遇到了一些问题 服务器返回404
  • 使用 linq 检查列表计数是否一致

    州有城市 只有在没有平局的情况下 我才需要拥有大多数城市的州 并列意味着排名前 2 的州拥有相同数量的城市 var stateWithMostCities states OrderByDescending p gt p cities Cou
  • 未找到 PHP 类 DateTime

    声明 DateTime 对象时缺少某些内容PHP 5 3 8 我得到一个带有确定日期时间的 JSON 字符串 该字符串被传递到我的 php 控制器 由于某种原因 我没有将其映射为 php 中的 DateTime 对象 但有点奇怪 请参阅以下
  • 转换为 YUV / YCbCr 色彩空间 - 许多版本

    有许多不同的 YUV 颜色转换 但它们都有不同的结果 哪一个是官方正确的 这是我的测试程序的输出 我输入 R 128 G 50 B 50 最大值为 255 该表显示了转换后的 YUV 值和重新转换后的 RGB 值 与原始值不匹配 Colou
  • Javascript d3 从 csv 读取

    好的 所以我对 javascript 有点菜鸟 我需要从 csv 读取数据以使用 d3 制作条形图 条形图对我来说没有问题 从 csv 文件中读取是问题 这是我的代码 var dataset d3 csv gender ratio csv
  • 如何在 keycloak docker 容器中进行数据库备份

    我使用 docker 安装了 keycloakdjango project docker run p 8080 8080 e KEYCLOAK USER admin e KEYCLOAK PASSWORD admin jboss keycl
  • 如何将属性绑定到WPF中Treeview中选定的节点

    如何将自定义属性绑定到MVVM中选定节点的IsSelected属性 我已在运行时将节点加载到树视图中 我正在使用MVVM 这是一个小例子 public abstract class ViewModel INotifyPropertyChan
  • 记住 WPF DataGrid 排序顺序

    这是一个延续这个问题 https stackoverflow com questions 34661767 binding properties width sorting of datagrid on dynamic tabpage 1
  • 如何让HTTP连接在一段时间后超时/断开?

    我是阿帕奇的新手HttpClient 我使用以下代码来获取一定时间间隔后的HTTP连接超时 断开连接 PostMethod method new PostMethod authURL HttpClient client new HttpCl
  • Symfony2 SwiftMailer 无法与主机 smtp.gmail.com 建立连接

    在阅读并测试了很多解决方案后 我仍然收到此错误 我的参数 yml parameters database host 127 0 0 1 database port null database name symfony database us
  • 如何获取 Frames/IFrames 内的 HtmlElement 值?

    我正在使用Winforms WebBrowser控制从下面链接的网站收集视频剪辑的链接 LINK http www fuoriditesta it video divertenti marito ubriaco prende la mogl
  • 在 URL 中显示两个单独的选择框值

    这里是两个选择框 我需要的是如果从两个框中都选择了值 则两者都应该显示在 URL 中 如下所示 例如www example com 135 140 OR www example com 135 140 只要两者都显示 这就是主要目的 以哪个
  • 如何在 JavaScript 中创建二维数组?

    我一直在网上阅读 有些地方说这是不可能的 有些地方说这是不可能的 然后给出一个例子 其他人反驳这个例子 等等 如何在 JavaScript 中声明二维数组 假设有可能 我如何访问其成员 myArray 0 1 or myArray 0 1
  • 如何让 Google Cloud Build 在响应 GitHub 触发器时正确替换值?

    问题 在 Google Cloud Build 中设置的 GitHub 触发器实际上不会在运行构建时替换配置的值 云构建 yaml 这是 Google Cloud Build 配置 云构建 yaml steps name gcr io cl
  • 在 Haskell 中生成一组布尔变量的所有组合

    我正在尝试使用 Haskell 中的列表单子 我试图在给定指定布尔变量的字符串列表的情况下生成所有可能命题的列表 例如调用 mapM print allPropositions a b 会产生以下结果 a True b True a Tru