特定のブール式の真理値表を生成しようとしています。新しい Datatype 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
ここで何が問題なのかわかりません。誰かが私を正しい方向に向けたり、リンクを投稿したりできれば、とても感謝しています。