質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OCaml

OCaml(オーキャムル)は、フランスのINRIAが開発した関数型言語MLの一種で、 最新の言語理論の成果が取り入れられているプログラミング言語です。

Q&A

1回答

525閲覧

Ocamlでラムダ計算をしたい

退会済みユーザー

退会済みユーザー

総合スコア0

OCaml

OCaml(オーキャムル)は、フランスのINRIAが開発した関数型言語MLの一種で、 最新の言語理論の成果が取り入れられているプログラミング言語です。

1グッド

0クリップ

投稿2021/07/10 03:25

Ocamlを初めて使うものです。
Ocamlでラムダ計算をしたいのですが、まだ構文などがよくわかっていなくつまづいています。簡単な例をあげるので、どのように記述するか教えていただけますでしょうか?

例)
L = λx. x+1の時、
L(L 3) = L ((λx. x + 1) 3) → L (3 + 1) → (λx. x + 1) (3 + 1) ,→ (3 + 1) + 1

D = λf.λx.f(f x)の時、
D L 3 = ((λf . λx. f (f x)) L) 3 → (λx.L(L x)) 3 →
L(L 3) →∗(3 + 1) + 1

C = λf . λg. λx. f (g x)の時、
C L L 3 → (λg. λx. L(g x)) L 3 → (λx. L(L x)) 3 →
L(L 3) →∗(3 + 1) + 1

これらをみて自分で他の問題も実装してみたいです。よろしくお願いします。

takabee👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2021/07/12 04:24

わからないなりに適当にでもかけると思いますので書いてみてください
guest

回答1

0

ご質問の「ラムダ計算がしたい」という文の意図が当方でうまくつかめておりませんが、「C L L 3などの結果を計算するプログラムを書きたい」ということでしょうか。

ocaml

1(* L *) 2let f1 x = x + 1 3 4(* L (L 3) *) 5let v1 = f1 (f1 3) 6 7(* D *) 8let f2 f x = f (f x) 9 10(* D L 3 *) 11let v2 = f2 f1 3 12 13(* C *) 14let f3 f g x = f (g x) 15 16(* C L L 3 *) 17let v3 = f3 f1 f1 3

上のf3は以下のf4と同じです。

ocaml

1(* C *) 2let f4 = fun f -> fun g -> fun x -> f (g x)

もしくは「評価器をつくりたい」ということであれば、以下が参考になるかと思います。

TaPL 7 章 型なしラムダ計算の1ステップ評価の OCaml による実装

もうすでに解決済みかもしれませんが、お役に立てれば幸いです。

投稿2021/10/15 15:43

fj68

総合スコア752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問