私は与えられたブール式の真理値表を生成しようとしています。私は新しいデータ型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
だから、私はリストから引数をとる関数を作ると考えました。 誰かが私を正しい方向に向けることができたり、そうしたリンクを投稿することができれば、非常に感謝しています。
[なぜそのような関数定義がhaskellで許可されていないのですか?](http://stackoverflow.com/questions/6168880/why-is-such-a-function-definition-not-allowed-in- haskell) –
ラムダを '(\ [x、y] - not(x || y))' 'として定義することができることに注意してください。これは自動的に、"同じ型のすべての引数" – leftaroundabout