ラムダ計算を書き出そうとしていますが、教会の条件を機能させることができません。私はおそらく Haskell 初心者だと言うべきでしょう。
私はオンラインと SO で解決策を見てきましたが、それらはすべて新しい型やその他のトリックの導入を伴いますが、できるだけ元の構文に近づけたいと考えています。例えば:
tru :: Integer -> Integer -> Integer
tru = \x -> \y -> x
fals :: Integer -> Integer -> Integer
fals = \x -> \y -> y
main = do
print (tru 2 3)
print (fals 5 6)
教会のブール値の正確な構文に一致します。
\a.\b.a
\a.\b.b
教会のif/elseの正確な構文を一致させる方法はありますか? を複製しようとして\p.\a.\b.p a b
いますが、何が間違っているのかわかりません:
ifelse :: Integer -> Integer -> Integer -> Integer -> Integer -> Integer
ifelse = \p -> \a -> \b -> p -> a -> b
main = do
print (tru 2 3)
print (fals 5 6)
print (ifelse tru 42 58)