如何为["a", "b", "c"]
之类的输入生成所有可能的真/假组合的真值表。
我觉得很难递归地思考它!
例如:
输入:["a", "b"]
输出:
[ [("a",True), ("b",True)],
[("a",True), ("b",False)],
[("a",False), ("b",True)],
[("a",False), ("b",False)] ]
答案 0 :(得分:4)
如何为a
类型的变量表示真值表?
type TruthTable a = [(a, Bool)]
truthTables :: [a] -> [TruthTable a]
没有变量的真值表是什么?只有一个:不包含变量赋值的那个。
truthTables [] = [[]]
在给定v:vs
的真值表的情况下,如何为变量vs
构造所有可能的真值表?您将vs
的每个可能的真值表,以及v
的每个可能的分配,并将它们组合起来:
truthTables (v:vs) = [(v, b):others | b <- [True, False], others <- truthTables vs]
我们也可以使用Monad
的{{1}}实例编写它:
[]