functional-programming - 生成真值表的更简单方法

标签 functional-programming sml smlnj

我想在 SML 中创建一个列表列表,它表示以下形式的真值表:

Example:

[
    [("r",true),("p",true),("q",true)],
    [("r",false),("p",false),("q",true)],
    [("r",false),("p",true),("q",true)], 
    ...
]

我认为我可以通过两种方式实现这一目标: (1) 与笛卡尔积 (2) 将真值表索引条目转换为二进制,这将表示列表中的编码行(例如 8(十进制)是 1000(二进制)=> [("r",true),("p",false), ("q",false)]),但我认为这太复杂了,可能有一种更简单的方法。

最简单的方法是什么?

最佳答案

fun tt []        = [[]]   
  | tt (x :: xs) =    
    let
      val txs = tt xs    
    in
      map (fn l => (x, true) :: l) txs @
      map (fn l => (x, false) :: l) txs    
    end


- tt ["a", "b", "c"];
val it =
  [[("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)]]
  : (string * bool) list list

关于functional-programming - 生成真值表的更简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20333184/

相关文章:

scala - 为什么在 for 理解中使用 `Try`?

tuples - number_in_month 练习(SML 函数从元组列表构建整数列表时出错)

sml - 在函数表示的环境中查找值

smlnj交互系统: fatal error

pattern-matching - 为什么绑定(bind)不详尽?

module - '如何正确使用高阶仿函数 ?' or ' 如何在 funsigs 中获得真正的乐趣?

Java 函数式编程 : creating a map of functions

scala - 如何加入两个数组是scala

Scala - 使用谓词函数来总结字符串列表

sml - SML 中的函数应用程序评估顺序是否具有确定性?