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

6
Hindley-Milnerのどの部分を理解していないのですか?
私はかつて不滅の言葉をフィーチャーした販売用のTシャツがあったことを誓います: のどの部分 分かりませんか? 私の場合、答えは...すべてです! 特に、Haskellの論文ではこのような表記がよく見られますが、その意味がわかりません。それがどういう数学の分野になるのか私にはわからない。 もちろんギリシャ語のアルファベットの文字と「∉」などの記号を認識します(これは通常、何かがセットの要素ではないことを意味します)。 一方、「⊢」は今まで見たことがありません(Wikipediaは「パーティション」を意味する可能性があると主張しています)。ここでのビンキュラムの使用についてもよく知りません。(通常は、分数を表し、それはしません表示され、ここでケースのように。) このシンボルの海が何を意味するのかを理解するためにどこから始めればよいかを誰かが少なくとも教えてくれれば、それは役に立ちます。

4
なぜHaskell(GHC)はとても速いのですか?
Haskell(GHCコンパイラを使用)は、予想よりもはるかに高速です。正しく使用すると、低レベルの言語に近づくことができます。(Haskellersが行うのが好きなことは、Cの5%以内を試すことです(またはそれを打つこともできますが、GHCはHaskellをCにコンパイルするため、非効率的なCプログラムを使用していることになります)。私の質問は、なぜですか? Haskellは宣言型であり、ラムダ計算に基づいています。マシンアーキテクチャは明らかにチューリングマシンに基づいているため、必須です。実際、Haskellには特定の評価順序さえありません。また、マシンデータタイプを処理する代わりに、代数データタイプを常に作成します。 最も奇妙なのは高次関数です。関数をその場で作成し、それらを使い果たすと、プログラムが遅くなると考えるでしょう。しかし、より高次の関数を使用すると、実際にHaskellが高速になります。実際、Haskellコードを最適化するには、マシンのようにではなく、よりエレガントで抽象的なものにする必要があるようです。Haskellのより高度な機能は、それを改善しなければ、パフォーマンスに影響を与えるようには見えません。 これが不満に聞こえる場合は申し訳ありませんが、ここに私の質問があります。その抽象的な性質と物理マシンとの違いを考慮して、なぜHaskell(GHCでコンパイル)がそれほど高速なのですか? 注:私がCや他の命令型言語がチューリングマシンにいくらか似ている(しかし、HaskellがLambda計算に似ているというわけではない)理由は、命令型言語では有限数の状態(別名行番号)があるためです、およびテープ(RAM)とともに、状態と現在のテープがテープに対して何を行うかを決定します。チューリングマシンからコンピューターへの移行については、Wikipediaのエントリ「チューリングマシンの同等物」を参照してください。

2
なぜλ-calculusの最適なエバリュエーターは数式なしで大きなモジュラ指数を計算できるのですか?
教会番号は、関数としての自然数のエンコードです。 (\ f x → (f x)) -- church number 1 (\ f x → (f (f (f x)))) -- church number 3 (\ f x → (f (f (f (f x))))) -- church number 4 きちんと、2つの教会の数を適用するだけで指数化できます。つまり、4対2を適用すると、教会番号16、またはを取得します2^4。明らかに、それは全く実用的ではありません。教会の数は線形のメモリ量を必要とし、本当に非常に遅いです。10^10GHCIがすぐに正しく答えるようなものを計算すると、時間がかかり、とにかくコンピュータのメモリを合わせることができませんでした。 最近、最適なλエバリュエーターを使って実験しています。私のテストでは、最適なλ計算機に誤って次のように入力しました。 10 ^ 10 % 13 べき乗ではなく、乗法であると考えられていました。指を動かして、絶え間なく実行されているプログラムを絶望的に中止する前に、それは私の要求に答えました: 3 { iterations: 11523, applications: 5748, …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.