タグ付けされた質問 「functional-programming」

1
タイプシステムは遅延関連のメモリリークを防ぎますか?
おそらく、Haskellのパフォーマンスの問題の主な原因は、プログラムが無制限の深さのサンクを誤って構築した場合です。これにより、評価時にメモリリークと潜在的なスタックオーバーフローの両方が発生します。古典的な例はsum = foldr (+) 0Haskell での定義です。 遅延言語を使用するプログラムでこのようなサンクの欠如を静的に強制する型システムはありますか? これは、タイプシステム拡張を使用して他の静的プログラムプロパティを証明するのと同じ難易度であると思われます。

2
関数型辞書のデータ構造を選択するにはどうすればよいですか?
次のデータ構造について少し読みました。 バグウェルの理想的なハッシュトライ Larsonの動的ハッシュテーブル 赤黒木 パトリシアの木 ...そして他にもたくさんの人がいると思います。私はそれぞれが何に適しているのか、あるいはなぜ私が他のものを選ぶのかについてはほとんど見たことがありません。したがって、これらの行に沿っていくつかの質問があります: 知っておくべき重要な関数型辞書のデータ構造は何ですか? これらのアプローチの長所と短所は何ですか? より命令的なデータ構造を使用するのはいつ意味がありますか? 2と3の番号がより重要です。:-)

1
Strategoプログラミング言語の理論上の限界は何ですか?
Strategoは、プログラミング変換言語/書き換えDSLです。 Anthony Sloaneは、Scalaで実行される実装を行うためにいくつかの作業を行っています。 関数型言語としてのStrategoの理論的な限界は何ですか?(実装に関係なく)。Strategoでアプリケーションオーダーycombinatorを記述できますか?



3
プリミティブ再帰汎関数のクラスは、胎児が終了することを証明した関数のクラスと同等ですか?
Foetusは、まだ聞いたことがない場合は、こちらで読むことができます。これは、関数の再帰呼び出しのすべての「再帰動作」を見つけるために、「呼び出し行列」と「呼び出しグラフ」のシステムを使用します。関数が終了することを示すには、関数に対して行われた再帰呼び出しのすべての再帰動作が特定の「辞書式順序」に従うことを示します。終了チェッカーは、すべてのプリミティブな再帰関数とアッカーマン関数などの関数を許可します。基本的に、これは複数引数のプリミティブ再帰を可能にします。これは基本的にAgdaの終了チェッカーでもあります。Coqにも同様の機能がいくつかあると思います。 DAターナーの論文「Total Functional Programming」を読んだところから。ゴデルが研究したシステムTに見られるように、彼の提案する言語はすべての「原始再帰関数」を表現できると彼は説明する。彼はさらに、このシステムは「全体が一次論理で証明できるすべての再帰関数を含むことが知られている」と述べています。 線量胎児はすべての基本的な再帰的機能を許可しますか?もしそうなら、それはプリミティブな再帰的関数ではない関数を許可しますか?これに対する回答を引用できますか?(私はただ興味があるので、これは実際には必要ではありません。それは、問題についてのいくつかの読書夫婦がいいだろうということだけです) おまけの質問:プリミティブ再帰汎関数は、コンビネーターに関して非常に簡潔な定義を持っています。型付きのSおよびK(固定小数点コンビネーターを表現できない)、ゼロ、後続関数、および反復関数。それでおしまい。そのような簡潔な定義を持ち、すべての表現が終了する他のより一般的なそのような言語はありますか?

1
Haskellの型クラスの可能な実装とは何ですか?それらの(欠点)は何ですか?
私の知る限り、型クラスの制約を持つHas​​kell関数は、特定の各型クラスの必要な実装を持つ辞書を受け取る追加の引数を持つ関数に内部的にコンパイルされます。 型クラスをコンパイルする方法は他にありますか? もしそうなら、彼らの(不)利点は何ですか? そして、どのコンパイラがそれらを使用しますか?

1
「ウェイ値は異なる場合があります」のタイプ
私は型理論の概念を探しています。おそらく探求されてきたはずですが、その背後にある名前はわかりません。 product型とsum型、およびHindley-Milner型のシステムを持つMLのような言語について考えてみましょう。OCaml構文を使用します。 2つの異なる値がどのように異なるのか疑問に思っています。 使用する 私のユースケースは、xUnitのようなライブラリに「より明確な」エラーメッセージを書き込むことです。2つの値が等しいことが期待されていたときに異なる場合、これはより明確なより良いメッセージを構築するのに役立ちます。 前: 値が異なります:期待される{x = [1;2;3;4], y = "a long string"}、得た{x = [1;2;3;3], y = "a long string"} 後: 値が異なります:位置で.x[3]、4、3と予想されます。 (最終的にレンズをより小さな異なる値に構築するため、機能レンズとの関係がある可能性があります)。 製品タイプ 例えば: type p = { x : int ; y : string } 平等は次のように定義できます。 let equal a b = equal_int a.x b.x && equal_string a.y …

2
カテゴリーごとのモナド変換子の説明
プログラミングにおけるカテゴリカルな概念に関するほとんどのリソースはモナドを説明していますが、モナド変換子のカテゴリカルな説明を見たことがありません。 モナド変換子をカテゴリー理論の観点からどのように説明できますか? 特に、次のことに関心があります。 モナド変換子とそれに対応する基本モナドの関係。 それらと新しいモナドに変換するモナドとの関係。 モナド変換スタック。

2
自由定理、どこ?
特定のタイプの無料の定理を生成できるこのWebアプリケーションを見つけました。 生成された定理は、タイプとこれらのタイプの関係を定量化します。これらの定理(式)は、どの理論/論理システムの定理ですか?このシステムは言語の方程式理論とどのように関係していますか?

2
再開ベースのIOシステム?
私は最近、主にAbramskyの古典的な論文Retracing Some Paths in Process Algebraからの再開をいじっています。それらは非常に洗練されており(基本的にはドメイン方程式R = I → (O × R )の解)、カーンネットワークを非常に連想させます。R=I→(O×R)R=I→(O×R)R = I \to (O \times R) もちろん、この観察は私には元々ありません---それらは追跡されたモノイドカテゴリを形成し、この事実は線形論理に意味論を与えるためにAbramskyとJagadeesanによって使用されました。いずれにせよ、再開にタイプIの入力を供給すると、タイプOの出力と更新された再開r ′が得られることに注意してください。これにより、データフローノードが入力を見ると変化するという事実をモデル化できます。お入りください。rrrIIIOOOr′r′r' 結果として、MLやHaskellなどの高次言語でI / Oトランスデューサーを構築するための優れたAPIを提供できるように思えますが、そのようなことを説明する論文は見つかりません。しかし、彼らは何十年も前から存在していて、ゴードン・プロトキンがそれらを発明したので、彼らが曖昧にだまされてきたようではありません。だから、誰かがそのような用途に使用されているのを見たことがあるのではないかと思いました。

1
優れたパフォーマンスを備えた関数型スパースマトリックス?
ペトリネットプログラムを作成しているときに、グラフを表すデータ構造に関する選択に直面しました。隣接リスト(つまり、個々の場所または遷移への弧を列挙するリスト)は実装が簡単ですが、ペトリネットの理論を研究しているときに、マトリックスベースの状態方程式アプローチの美しさに夢中になりました。おそらく、スパース行列を使用する必要があります。 どちらが私を不思議に思いました-行と列の両方で高速な列挙を提供するスパース行列の実装はありますか?そうでない場合、Erlangなどの関数型言語で2部グラフを構築して効率的にトラバースできる代替手段はありますか? FWIW-「効率的に」とは、この場合、特定の遷移または場所に発生するアークをすばやく列挙することを意味します。トレードオフが必要な場合は、時間とスペースをトレードするほうが幸せです。グラフは作成後に変更されないため、挿入や更新に特に効率的である必要はありません。 TIA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.