1

ラムダ計算を書き出そうとしていますが、教会の条件を機能させることができません。私はおそらく 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)
4

1 に答える 1