我正在尝试为给定的布尔表达式生成一个真值表。我可以通过创建一个新的数据类型 BoolExpr 来做到这一点,但我想用一个匿名函数来做到这一点。它应该像这样工作:
> tTable (\x y -> not (x || y))
output:
F F | T
F T | F
T F | F
T T | F
我的做法:
tbl p = [(uncurry p) tuple | tuple <- allval]
where allval=[(x,y) | x <- [False,True], y <- [False,True]]
这有效,但仅适用于 2 个参数。我想为任意数量的参数做这件事。所以我想我会做一个从列表中获取参数的函数:
argsFromList f [] = f
argsFromList f (x:xs) = argsFromList (f x) xs
这不起作用:
Occurs check: cannot construct the infinite type: t = t1 -> t
Expected type: t -> [t1] -> t1 -> t
Inferred type: (t1 -> t) -> [t1] -> t1 -> t
In the expression: argsFromList (f x) xs
我不明白这里有什么问题。如果有人能指出我正确的方向或发布链接,我将不胜感激。