【问题标题】:Easier way to generate a truth table生成真值表的更简单方法
【发布时间】:2013-12-03 00:57:00
【问题描述】:

我想在 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)]),但我认为这太复杂了,可能有更简单的方法。

最简单的方法是什么?

【问题讨论】:

    标签: functional-programming sml smlnj


    【解决方案1】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2013-03-19
      • 1970-01-01
      • 2013-04-11
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多