Generating a Truth Table

℡╲_俬逩灬. 提交于 2020-01-09 11:26:48

问题


If I have some values A B C, is is possible to generate a list of all their possible truth values: the input is ["X", "Y", "Z"] e.g. the list contains 8 lists (rows of table)

[ [ ("X",True), ("Y",True), ("Z", True) ],
[ ("X",True), ("Y",True), ("Z", False) ],.... ]

Are there any hints on how to do this?

I would like to generate a truth table for an arbitrary number of variables.


回答1:


What you need is not a truth table but rather a cartesian product. You can obtain what you want using list comprehension: [(x,y,z) | x <- [True, False], y <- [True,False], z <- [True,False]]

If you want to keep variable names you can use tuples: [(x,y,z) | x <- [("X", True), ("X", False)], y <- [("Y", True), ("Y", False)], z <- [("Z", True),("Z", False)]]




回答2:


Let the recursion be with you. If you have a truth table for n variables, you can obtain one for n+1 variables (with added variable X) by appending first (X, True) to the table for n variables, and then appending (X, False).

truthTable :: [String] -> [[(String, Bool)]]
truthTable [] = [[]]
truthTable (x:xs) = (map ((x,True):) ts) ++ (map ((x,False):) ts) where ts = truthTable xs


来源:https://stackoverflow.com/questions/35120766/generating-a-truth-table

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!