【发布时间】:2017-04-13 14:18:20
【问题描述】:
我试图为字符串列表制作一个真值表。
说,我有一个列表 ["a","b"] 作为输出,我想要
[[("a",True),("b",True)],
[("a",True),("b",False)],
[("a",False),("b",True)],
[("a",False),("b",False)]]
真值表中的每个实例都是自定义数据类型,定义为
data TableRow = [(String,Bool)]
有没有更简单的方法?直到现在我一直在这样做
genRow :: [String] -> [TableRow]
genRow [] = []
genRow (x:xs) = ((makeRow x True) : genRow xs) ++
((makeRow x False) : genRow xs)
很明显,这并没有达到我的预期。请注意,makeRow 只接受 String 和 Bool 并返回 TableRow。
有没有更清洁的方法呢?谢谢
【问题讨论】:
-
makeRow是做什么的? -
你是说你想要笛卡尔积两个列表吗?你知道列表推导吗?
-
data TableRow = [(String,Bool)]无效。您需要一个数据构造函数名称。
标签: haskell functional-programming generator truthtable