如何为这样的输入生成所有可能的真/假组合的真值表["a", "b", "c"]
.
我发现递归地思考它真的很难!
例如:
输入:["a", "b"]
输出:
[ [("a",True), ("b",True)],
[("a",True), ("b",False)],
[("a",False), ("b",True)],
[("a",False), ("b",False)] ]
如何表示类型变量的真值表a
?
type TruthTable a = [(a, Bool)]
truthTables :: [a] -> [TruthTable a]
你的真值表有什么用no变量?只有一种:不包含变量赋值的一种。
truthTables [] = [[]]
如何构建变量所有可能的真值表v:vs
,给定真值表vs
?你把每一个可能的真值表vs
,以及每一个可能的分配v
,并将它们组合起来:
truthTables (v:vs) = [(v, b):others | b <- [True, False], others <- truthTables vs]
我们也可以使用Monad
的实例[]
:
truthTables [] = return []
truthTables (v:vs) = do
this <- [True, False]
them <- truthTables vs
return (this:them)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)