タグ付けされた質問 「lambda-calculus」

2
ラムダ計算とプログラミング言語の関係は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 来年はコンピューターサイエンスの最初の1年(大学)を開始し、ほとんどCで書きます(それが問題になる場合)。私は検索を試みましたが、私が見つけるもののほとんどはラムダ計算の知識を前提としています。プログラミングでラムダ計算が単一変数計算よりもはるかに有用であると考えられるのはなぜですか?ラムダ式と関数型プログラムの間に関係はありますか?プログラミング言語の開発に影響を与えたのは、ラムダ計算に関するアロンゾ教会の仕事でしたか? 学校の外の誰もがそれについて騒ぎ続けており、私はそれを学び、それがプログラミングとプログラミング言語の理解に直接関係することを熱望しているにもかかわらず、彼らが何について話しているのか見当がつかない。

1
本質的にλ計算とは何ですか?
λ計算についての哲学的質問と呼ぶものがあります。 λ-calculusを探索すると、そこでできるすべてのことを見て驚くでしょう。整数、算術演算、ブール値、if-then-elseステートメント、ループ、再帰関数などを定義できます。計算的に完全であることが証明されていると思います。 しかし、反対に、λ-calculusの関数で何ができるかを考えると、できることは関数を渡すだけで別の関数が返されることです。そして、そのプロセスは決して終わりません。 では、どのようにして計算から結果を抽出できますか? 式の結果がfunctionであると仮定しますf。あなたfが期待したものであるかどうかを確認したい。あなたはそれをテストし、あなたが知っている機能を取り、それに適用fして受け取ることができgます。しかし、チェックgが正しいためには、何をするかを検証する必要がありますg。そして、最初からやり直します。では、どうすれば何を伝えることができますfか? λ計算のすべての関数を単一の関数である恒等関数I = λx.xに置き換えることができ、すべてがλ計算で説明されているように機能するように思えます。教会の数字3が与えられfてx戻ってきますf(f(f(x)))。しかし、fとxしかできないのでI、戻りますI。 Iに適用されI、Iを返しますI。だから、I満たすの定義3。「ブール」(λxy.x)と(λxy.y)なりますが必要2つの引数、IおよびIその両方のブール値が返されますI。それぞれが定義どおりに動作する場合でも、それぞれがIDと同等です。 それでは、どのように違いを生みますか?λ計算が単一の関数以上のものを扱うことをどのように示しますか? アイデンティティの概念はありますか?評価せずにすぐに関数を識別できますか?2つの関数が等しいかどうかをテストする方法がないことが証明されたと思います。 または、λ計算は関数ではなく、関数の正式な記述についてですか?つまり、λ式は関数が行うことを定義するだけでなく、関数が操作するデータでもあることを意味します。したがって、を記述する場合A B、には適用さAれませんBが、文字列で記述されAた関数を、B別の形式定義を返すことに含まれる関数の形式定義に適用します。 λ計算では実際に何が起こっているのですか?それが扱う数学的オブジェクトは何ですか? ファローアップ: OK、以下の回答から、λ計算は数学的な意味での関数ではなく、λ式として表現できる関数のサブセットに関するものであるようです。または、λ表現の操作についてさらに詳しく説明します。

3
Haskellおよび/またはラムダ計算におけるパラメーターなしのラムダ式
SchemeやPythonなどの熱心な言語では、パラメータなしのラムダ式を使用して、評価を遅延させることができます。たとえば、Scheme(チキンスキーム)の場合: #;1> (define (make-thunk x) (lambda () (+ x 1))) #;2> (define t (make-thunk 1)) #;3> (t) 2 2行目tは未評価の式にバインド(lambda () (+ 1 1))され2、3行目で評価されます。 同様に、Pythonでは: >>> def make_thunk(x): return lambda: x + 1 ... >>> t = make_thunk(1) >>> t() 2 この手法を使用すると、熱心な言語で遅延評価を実装できます。 そのため、言語が既に遅延しており、遅延式を作成する必要がないため、Haskellにはパラメーターなしのラムダ式がないと予想していました。驚いたことに、Haskellではラムダ式を書くことが可能であることがわかりました \() -> "s" これは次の()ような値にのみ適用できます: (\() -> "s") () …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.