問題タブ [combinators]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
functional-programming - Yコンビネータとは?
Y コンビネーターは、物事の「機能」面からのコンピューター サイエンスの概念です。ほとんどのプログラマは、コンビネータについて聞いたことがあるとしても、コンビネータについてまったく知りません。
- Yコンビネータとは?
- コンビネータはどのように機能しますか?
- 彼らは何のために良いですか?
- それらは手続き型言語で役に立ちますか?
python - パーセクのPython実装?
最近、Ply を使用して Python でパーサーを作成しました (これは yacc を Python で再実装したものです)。パーサーをほぼ使い終えたとき、構文解析する必要がある文法では、構文解析中にルックアップを行ってレクサーに通知する必要があることに気付きました。レクサーに通知するためにルックアップを行わないと、言語の文字列を正しく解析できません。
文法規則からレクサーの状態を制御できることを考えると、パーサーモジュールのルックアップテーブルを使用してユースケースを解決すると思いますが、保守/テストが難しくなりすぎる可能性があります。そこで、他のオプションについて知りたいと思います。
Haskell では、構文解析関数 (コンビネーターとして知られる) のライブラリーである Parsec を使用します。Parsec の Python 実装はありますか? それとも、Python でコンテキスト依存のパーサーを構築できるように、構文解析機能を備えた他の製品品質のライブラリでしょうか?
編集:コンテキストフリーの解析での私の試みはすべて失敗しました。このため、ANTLR がここで役立つとは思いません。
function - 「コンビネータ」の適切な説明 (数学者以外向け)
「コンビネーター」(Yコンビネーターなどであり、会社ではありません )について適切な説明を受けた人はいますか?
再帰と高階関数を理解しているが、理論や数学のバックグラウンドが強くない実用的なプログラマーを探しています。
(注:私はこれらのことについて話していること)
haskell - folderr を使用して zip を実装する
私は現在、Real World Haskell の第 4 章に取り組んでおり、 foldr に関して foldl を実装することに頭を悩ませようとしています。
(これが彼らのコードです:)
同じ手法を使って実装しようと思っzip
たのですが、進展がないようです。それは可能ですか?
scala - Scala コンビネーター パーサー - 数値文字列と変数文字列を区別する
Cay Horstmann のコンビネーター パーサーの演習を行っています。match ステートメントで、数値を表す文字列と変数を表す文字列を区別する最善の方法を考えています。
そこの 2 行目の「case a: wholeNumber」は正しくありません。正規表現について考えましたが、「ケース」で動作させる方法が見つかりませんでした。
haskell - これは、Haskell の folderr 関数の正しい書き方ですか?
私はYAHT の再帰的データ型セクションの演習を行っていましたが、関数を書くのが少し難しいことに気付きました (主な理由は、最初はとlistFoldr
の違いがよくわからなかったからです)。関数がどのように機能するかを最終的に正確に理解したとき、関数を関数に変更するために必要なのは関数の引数の単純な交換だけであると判断しました。foldl
foldr
foldr
listFoldl
listFoldr
これは機能しているようです(これよりも多くのテストを行いました):
しかし、演習に与えられた解決策は、私のものとは大きく異なります。それらlistFoldl
は私のものとまったく同じですが、それらを見てくださいlistFoldr
:
私のソリューションと彼らのソリューションのどちらが優れていますか? それらの1つは間違っていますか?(私のテストでは、どちらもまったく同じ結果になります...)
ruby - Ruby<=>コンビネータの実装
まれではありませんが<=>
、製品データ型、つまり複数のフィールドを持つクラス(すべて(私たちはすでに<=>
実装されていることを願っています))に(比較または「宇宙船」)演算子を実装して、特定のフィールドを比較したいと考えています。注文。
これは、特に多くのフィールドで、面倒でエラーが発生しやすくなります。エラーが発生しやすいので、その関数を単体テストする必要があると頻繁に感じます。これにより、面倒で冗長性が増します。
Haskellはこれを行うための特に優れた方法を提供します:
(に精通していない人のためfold
に、上記はに拡張されます
D
これは、2つのsに適用できる関数を生成し、を生成しOrdering
ます。)
の定義compareD
は非常に単純なので明らかに正しいので、静的な型チェックがなくても単体テストの必要性を感じることはありません。
実際、この質問はこれよりも少し興味深いかもしれません。標準の<=>
演算子だけを使用するのではなく、さまざまな時間にさまざまな方法で並べ替えるからです。たとえば、次のようになります。
だから、質問:
- この種のものをRubyで実装する典型的な方法は何ですか?
- 標準ライブラリで定義されているものだけを使用してそれを行う最も良い方法は何ですか?
- 上記のHaskellコードにどれだけ近づくことができ、それと比較してどれほど信頼できるでしょうか?
<=>
必要に応じて、フィールドにor<
と>
演算子が適切に実装されていることをどのように確認できますか?
ちなみに、これはRubyの質問ですが、このサイトの長老たちが同意すれば、トピックに関するHaskellの手法についての議論を検討できてうれしいです。それが適切かどうかについてコメントしてください。適切な場合は、この投稿にも「haskell」のタグを付けてください。
haskell - zygo/meta/histo/para/futu/dyna/whatever-morphisms とは何ですか?
広範な圏論の知識がなくてもアクセスできる例を含むそれらのリストはありますか?
xml - RubyでXMLタグを解析するときに、すべてのコンテンツの合計を取得するにはどうすればよいですか?
次のようなXHTMLがあります(ただし、実際にはどのXMLでも構いません)。
<h1/>
Rubyで文字列としての完全なコンテンツを取得するにはどうすればよいですか? 次のように:
XML フレームワーク ( Nokogiri、libxml-rubyなど) には、このようなものが組み込まれていますか? そうでない場合、Y-Combinator がこの仕事に適したツールかもしれないと思いますが、それがどのようになるかはよくわかりません。
haskell - Haskell:「groupBy」の驚くべき振る舞い
最初の引数として渡された「等式テスト」関数によってリストの要素をグループ化することを目的としたライブラリ関数groupBy(Data.Listから)の動作を理解しようとしています。型シグネチャは、同等性テストに型が必要であることを示しています
ただし、GHCi 6.6で「同等性テスト」として(<)を使用すると、結果は期待したものとは異なります。
代わりに、次のように、厳密に増加する数の実行を期待します。
私は何が欠けていますか?