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

2
(方法)チューリング計算モデルがなくてもNP問題を発見/分析できますか?
純粋に抽象的な数学/計算推論の観点から、(どのように)3-SAT、サブセットサム、巡回セールスマンなどの問題を発見または推論できますか?何か意味のある方法でそれらについて推論することさえできますか?機能的な観点でしょうか?それも可能でしょうか? 私は、ラムダ計算の計算モデルを学習する一環として、この質問を純粋に自己探求の観点から熟考してきました。私はそれが「直感的ではない」ことを理解しており、それがゲーデルがチューリングモデルを支持した理由です。ただし、この機能スタイルの計算の既知の理論的制限は何か、NPクラスの問題を分析するのにどれほどの障害があるかを知りたいだけです。

2
ジッパーとは何ですか?また、それはツリーのような構造とどのように関連していますか?
私はLYAHの章を読んでいましたが、それは私にはあまり意味がありませんでした。ジッパーはツリーのような構造を任意にトラバースできることを理解していますが、それについて明確にする必要があります。また、ジッパーは任意のデータ構造に一般化できますか?

1
関数型プログラミング言語にガベージコレクションが必要なのはなぜですか?
ghcがHaskellを組み合わせロジックなどの連結プログラミング言語に翻訳し、単純にすべてにスタック割り当てを使用するのを妨げているのは何ですか?ウィキペディアによると、ラムダ計算から組み合わせロジックへの翻訳は簡単であり、また、連結プログラミング言語はメモリ割り当てのためにスタックのみに依存することができます。この翻訳を実行して、Haskellやocamlなどの言語のガベージコレクションを削除することは可能ですか?これを行うには欠点がありますか? 編集:ここに移動/programming/39440412/why-do-functional-programming-languages-require-garbage-collection

1
型クラスの数学(カテゴリ)記述
関数型言語は、そのオブジェクトが型であり、それらの間の射影関数であるカテゴリとして見ることができます。 型モデルはこのモデルにどのように適合しますか? ほとんどの型クラスが持っている制約を満たしているが、Haskellでは表現されていない実装のみを検討すべきだと思います。たとえば、Functorfor fmap id ≡ idおよびの実装のみを考慮する必要がありfmap f . fmap g ≡ fmap (f . g)ます。 または、型クラスに他の理論的な基礎はありますか(たとえば、型付きラムダ計算に基づいています)?


3
連想ハッシュミキシング
純粋に機能的な設定で、一重にリンクされたリストを検討してください。その賞賛は山頂から歌われており、今後も歌われ続けます。ここでは、その多くの長所のうちの1つと、それをツリーに基づく純粋に機能的なシーケンスのより広いクラスに拡張する方法の問題に取り組みます。 問題は次のとおりです。強力なハッシュを使用して、O(1)時間のほぼ一定の構造的同等性をテストする必要があります。ハッシュ関数が構造的に再帰的である場合、つまり、hash(x:xs)= mix x(hash xs)の場合、リストのハッシュ値を透過的にキャッシュし、要素が既存のリストに結合されたときにO(1)でそれらを更新できます。リストをハッシュするためのほとんどのアルゴリズムは構造的に再帰的であるため、このアプローチは実際に非常に有用です。 しかし、一重リンクリストの代わりに、O(log n)時間で長さO(n)の2つのシーケンスの連結をサポートするツリーベースのシーケンスがあるとします。ここでハッシュキャッシングを機能させるには、ツリーが同じ線形シーケンスを表す際に持つ自由度を尊重するために、ハッシュミキシング関数を連想的にする必要があります。ミキサーは、サブツリーのハッシュ値を取得し、ツリー全体のハッシュ値を計算する必要があります。 これは、6か月前、この問題を熟考して調査するのに1日費やした場所です。データ構造に関する文献では注目されていないようです。暗号化からTillich-Zemorハッシュアルゴリズムに出くわしました。これは、ビット0と1がガロア体のエントリを持つ部分代数の2つの生成器に対応する2x2行列乗算(連想)です。 私の質問は、私が逃したものは何ですか?私の検索で見つけられなかった暗号とデータ構造に関する文献の両方に関連性のある論文がなければなりません。この問題についてのコメントと探求する可能性のある場所は大歓迎です。 編集:スペクトルのソフトと暗号の両方の強みに関するこの質問に興味があります。よりソフトな側面では、衝突を回避する必要があるが壊滅的ではないハッシュテーブルに使用できます。強い面では、同等性テストに使用できます。


2
バイナリ関数の継続受け渡し変換
リコールとる(CPS変換)変換通過継続AAAにβA := RRAβA:=RRA\beta A \mathrel{{:}{=}} R^{R^A}(固定され)、とによって定義 実際、単位を持つ継続モナドがあり定義され 及び乗算によって定義 F :A → B β F :β A → β B βRRRf:A → Bf:A→Bf : A \to Bβf:βA → βBβf:βA→βB\beta f : \beta A \to \beta BβfκR := κ (R ∘ F)。βfκr:=κ(r∘f)。\beta \, f \, \kappa \, r \mathrel{{:}{=}} \kappa (r \circ …

2
関数型プログラミングの違いリスト
質問岡崎以来の純粋に機能的なデータ構造の新機能 (論理プログラミングではなく)、およびjbappleの叙事詩の答えは、私は最近、これが見つけるために私を導いた。に興味を持ってきたものですこれは、関数型プログラミングでは、差分リストを使用して言及した差分リストの Haskellのための実装を。2つの質問があります(StackExchangeで2つの異なる質問をする必要がある場合は、ご容赦ください。)。 簡単な質問は、Haskellライブラリにあるもの以外に、関数型プログラミングや実装の違いリストの学術的検討を知っている人はいますか?jbappleの答えは、差分リストの引用を提供しませんでした(ロジックプログラミングの差分リストは、伝承と、Around Here Somewhere(TM)にあるいくつかのソースにあります)。Haskellの実装を見つける前に、そのアイデアが論理から関数型プログラミングに飛躍したことを知りませんでした。確かに、Haskellの差分リストは高階関数の自然な使用であり、ロジックプログラミングのものとはまったく異なる動作をしますが、インターフェイスは確かに似ています。 私が聞きたかったのは、もっと興味深い(そしてずっと曖昧な)ものは、前述のHaskell差分リストライブラリの主張された漸近的上限かどうかです。正しい/妥当と思われるです。私の混乱は、怠inessな複雑さの推論について明らかなものを見逃しているためかもしれませんが、大きなデータ構造上の置換(またはクロージャー形成、変数ルックアップ、または何か)が常に一定の時間がかかる場合にのみ、主張された境界が意味をなします。または、「キャッチ」とは、単に「ヘッド」と「テール」の実行時間に制限がないということです。これらの操作は、遅延計算/置換の任意の山を耕さなければならないからです。

1
言語(およびその型システム)が独自の用語に関する定理を証明できるのはなぜですか?
私は最近、独自の用語に関する数学的定理を証明できる最小限のプログラミング言語であるAaronのCedille-Coreを実装しようとしました。また、λでエンコードされたデータ型の帰納法を証明しました。 それほどではないが、これらの拡張機能がどこから来たのか、まだ疑問に思っている。なぜ彼らは彼らですか?それらを正当化するものは何ですか?たとえば、再帰などの一部の拡張機能は、言語を証明のシステムとして台無しにすることを知っています。CoCを他のプリミティブで拡張することにした場合、どのように正当化できますか?正規化の証明が必要であることは理解していますが、それはそれらのプリミティブが「意味をなす」ことを証明しません。 要するに、言語(およびその型システム)を、それ自体の用語に関する定理を証明できるシステムとして特に限定するものは何ですか?

2
Alternative、MonadPlus(LeftCatch)とMonadPlus(LeftDistributive)の関係は何ですか?
フォローアップモナドプラスではなく、代替であるモナドの例は何ですか?: がモナドであると仮定します。関係はbetweem何ですかmがあることオルタナティブ、MonadPlusCatchとMonadPlusDistr?mmmmmm6つの可能性のあるペアのそれぞれについて、一方が他方を暗示しているという証拠、またはそれが暗示していない反例のいずれかを持ちたいと思います。 (私は使用しています 左キャッチ規則を満たすMonadPlusを区別するMonadPlusCatch: mplus (return a) b = return a 左分配規則を満足させるMonadPlusを区別するMonadPlusDistr: mplus a b >>= k = mplus (a >>= k) (b >>= k) HaskellWikiのMonadPlusを参照してください。) 私の現在の知識と直感は次のとおりです。 MonadPlusDist オルタナティブ - おそらく真 - それは簡単なようで、私は私が証明のスケッチ持っていると信じて、私はそれをチェックしますし、それが正しいなら、私はそれを投稿します AndrewCはこの部分を答えました。→→\rightarrow →→\rightarrow Maybe →→\rightarrow MaybeT (Either e)MaybeT m' ((pure x) <|> g) <*> a = -- LeftCatch …

2
O(1)concatを使用した単純なバランスのとれたツリー?
では純粋に機能最悪の時定数Catenableソートリスト、Brodalら。O(1)連結およびO(lg n)挿入、削除、および検索を備えた純粋に機能的なバランスの取れたツリーを提示します。データ構造はやや複雑です。 O(1)連結、機能的またはそうでないより単純なバランスのとれた検索ツリーはありますか?

1
「意味的に観察可能な」副作用とは正確にはどういう意味ですか?
純粋な機能に関して質問があります。ウィキペディアのページによると、純粋な関数の必要条件の1つは次のとおりです。 結果を評価しても、可変オブジェクトの変更やI / Oデバイスへの出力など、意味的に観察可能な副作用や出力は発生しません。 さて、これは本当に何を意味するのでしょうか。または、意味的に観察できない副作用をどのように作成できますか?

3
データ並列演算子を備えた完全な関数型言語を使用してどのアルゴリズムを表現できますか?
データ型のみが数値スカラーと配列の任意のネストである関数型プログラミング言語を想像してください。この言語には、無制限の反復の手段がないため、次のものは許可されません。 明示的なループ(副作用なしではあまり使用されません) 再帰 任意のファーストクラス関数(yコンビネーターなし) ただし、言語には次のものがあります。 トップレベル関数 レキシカルスコープのletバインディング 分岐制御フロー 一般的なスカラー数学および論理関数 fill(n、x)のようないくつかの単純な配列コンストラクターは、同じ値xを持つn要素の配列を作成します 最も重要なこと:並列構造化反復(map、reduce、scan、all-pairsなど)を実行する高次演算子の制限されたセット。 データ並列演算子をより具体的にするには: y = map(f、x)=> y [i] = f [i] y = reduce(f、a、x)=> y = f(a、f(y [p [0]]、f(y [p [1]]、...)))いくつかの順列p y = scan(f、a、x)=> y [i] = reduce(f、a、y [0 ... i-1]) y = allpairs(f、x、y)=> y [i、j] = f(x [i]、y [j]) 他の演算子を使用することもできますが、修飾するには多項式の実行時間を持ち、データ並列計算の合理的なモデルの下で実装可能であり、多くても多項式空間を使用する必要があります。 …

1
インタラクションコンビネーターを使用して、Lampingの抽象的なアルゴリズムをどのようにエンコードしますか?
相互作用コンビネータは、以前にλ計算のコンパイルターゲットとして提案されています。その論文は完全なλ計算を実装しています。また、 EALタイプ可能であるλ項のサブセットについて、λ 計算の相互作用ネットエンコーディングを最適化することが可能であることも知られています。その論文は、EALタイプ可能なλ項を相互作用コンビネーターよりも間違いなく複雑な相互作用ネットに変換することにより、λ計算のサブセットを実装します。これは、ラベルの無限アルファベットを使用して複製子をグループ化するためです。 両方の提案を組み合わせることができるのでしょうか。つまり、相互作用の組み合わせとして、抽象アルゴリズム(つまり、EALで型付け可能なλ項)のエンコーディングはありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.