に教会の番号を適用します。それには fun power m n f = n m f;
を、私は掛け算を参照してください。乗算は: fun times m n f = m (n f);
となり、私は間違っていることを知っています。 問題は、どの機能が教会番号を別のものに適用するのか理解できないことです。 たとえば、この式では何が生成されますか? (fn x => fn y => x (x y
ここには示されていない無関係のコード部分に使用するGADT拡張機能でコンパイルするときに、タイプエラーが発生するため、以下の関数が拒否されます。 newtype Church = Church { unC :: forall a. (a -> a) -> a -> a }
to_c :: Int -> Church
to_c 0 = let f0 f c = c in Church f0
t
次の定義された構造体と型には、2つの数値の乗算が必要です。それをするのに困っている。アドバイスをいただければ幸いです。 (define-struct Zero())
(define-struct Succ
([n : Nat]))
(define-type Nat (U Zero Succ))
(: one Nat)
(define one (Succ (Zero)))
構造と解釈コンピュータプログラムの私が読んでいる本はゼロを定義することによって、教会の数字を提示し、インクリメント機能 zero: λf. λx. x
increment: λf. λx. f ((n f) x)
これは私にはかなり複雑なようで、それが数字に私には本当に長い時間がかかりましたそれを取り出して1つ(λf.λx. f x)と2つ(λf.λx. f (f x))を得ます。 空のラム
私はハスケルの初心者です。 クラスの型のインスタンスを作成する方法があるかどうかを調べています。 データやnewtypeを使用せずにこのコードを使用する方法はありますか? type N = ∀n. (n -> n) -> n -> n
instance Printable N where
print :: N -> IO()
read :: String -> N