問題タブ [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.

0 投票する
2 に答える
2073 参照

scala - 関数のリストに flatMap/bind を折り畳む (別名 Name That Combinator!)

単純な RPN 計算機を作成する過程で、次の型エイリアスがあります。

...そして、奇妙なScalaコードの行を書きました:

これは値の初期値を取り、そのスタックにstackリストを適用します。operations各操作は失敗する可能性がある (つまり、 が生成されるOption[Stack]) ため、それらを で順序付けますflatMap。これについて (私の考えでは) ちょっと変わっているのは、データのリストを折りたたむのではなく、モナド関数のリストを折りたたんでいることです。

この「フォールド バインド」動作をキャプチャする標準関数があるかどうかを知りたいです。「Name That Combinator」ゲームをプレイしようとしているとき、Hoogle はたいてい私の友達なので、Haskell で同じ頭の体操を試みました。

ここでのタイプは次のとおりです。

したがって、 と の型を並べた後のミステリーfoldl (>>=)コンビネータの型は次のようになります。foldl(>>=)

...これもまた、私たちが期待するものです。私の問題は、Hoogle でその型の関数を検索しても結果が得られないことです。私は合理的であると思われる他のいくつかの順列を試しました: a -> [a -> m a] -> m a(つまり、非モナド値で開始)、[a -> m a] -> m a -> m a(つまり、引数を反転して)、しかし運もありませんでした。私の質問は、私の謎の「フォールドバインド」コンビネーターの標準的な名前を知っている人はいますか?

0 投票する
1 に答える
755 参照

lambda - 関数適用を実装したラムダ計算式

次のラムダ計算式を見つけました。

つまり、これは引数 f を取り、引数 x を取り、x を f に適用した結果を生成する別の関数を返す関数です。上記の式の結果は (λ b . b) になります。

これは部分適用とカリー化を思い起こさせますが、「インサイド アウト」関数適用 (fx) が私の興味をそそりました。

その表現には、より深い理論的な意味がありますか?

0 投票する
1 に答える
158 参照

haskell - 提示されたケースを 1 つのループに最適化することは可能ですか?

と の 2 つの関数があるf :: [a] -> bとしg :: [a] -> cます。次の 2 つの質問があります。

  1. (f &&& g) xswhereを実行しxs :: [a]、 if bothfgループが含まれる場合、コンパイラはこれら 2 つのループを 1 つに最適化できますか? (特定の Haskell コンパイラがこれを実装しているかどうかを尋ねているわけではないことに注意してください。そのようなことが可能かどうか知りたいです。)

  2. traverse型クラスの関数はTraverse、次の行に沿って何かを最適化するのに役立ちますか?

    /li>
0 投票する
2 に答える
350 参照

f# - fsharpの関数マージ/コンビネータ

入力として同じタイプを受け入れ、出力として異なるタイプを受け入れる関数のリストがあります

それらを次のタイプの 1 つの関数にマージできる操作はどれですか?

同様に、同じ型を返す関数のリストがある場合

それらを次のタイプの 1 つの関数にマージできる操作はどれですか?

標準的な「preCombinator」または「postCombinator」になります。(FPに名前があると思います..)

0 投票する
3 に答える
633 参照

haskell - コンビネータの型シグネチャが、同等のLambda関数の型シグネチャと一致しません

このコンビネータを考えてみましょう。

引数XYに適用します。

それは以下に契約します:

S(SK)を対応するラムダ項に変換し、次の結果を得ました。

Haskell WinGHCiツールを使用して(\ xy-> xy)の型アノテーションを取得すると、次のように返されます。

それは私には理にかなっています。

次に、WinGHCiを使用してs(sk)の型シグネチャを取得すると、次のように返されます。

それは私には意味がありません。型アノテーションが異なるのはなぜですか?

注:s、k、およびiを次のように定義しました。

0 投票する
2 に答える
1331 参照

parsing - Scala:コンビネーターパーサーからの解析結果(〜)をリストにフラット化しますか?

組み合わせライブラリからパーサーを作成しました。任意のサイズのネスト〜をリストに変換する総称関数が必要です。これを行う方法 ?

これが私が使用するパーサーの例です(私の実際のパーサーは非常に長いチェーンを持っているので、以下のコメントにある現在のソリューションを避けたいと思います)。

0 投票する
1 に答える
1385 参照

haskell - このコンビネータは何をしますか:s(sk)

私は今、次の型署名を理解していますs (s k)

そして、HaskellWinGHCiツールでエラーなしで機能する例を作成できます。

を返します2

を返します4

ここsuccessorで、次のように定義されます。

それにもかかわらず、私はまだ何をするのかについて直感的な感覚s (s k)を持っていません。

コンビネータs (s k)は、任意の2つの関数fとを取りますg。とは何s (s k)fgますか?何をお願いするかについての全体像を教えていただけますs (s k)か?

0 投票する
1 に答える
224 参照

combinators - FParsec スタイル; コンビネータとモナド スタイルの違いを示しますか?

私は約 2 か月間 F# を初めて使用し、最近FParsec チュートリアルを終了し、さらに例を探し始めました。読めば読むほど混乱し、スタイルへの言及を目にするようになりました。もっとスタイルを探して、このリストを思いついた.

  • コンビネータ スタイル
  • モナディックスタイル
  • 矢印のスタイル
  • ダイレクトスタイル

誰かがすべてのスタイルをリストし、それぞれが一般的な問題でどのように機能するかを説明および実証できますか。

の中へ

使用する

編集

FParsecのコメントと区切り文字ベースの構文から、コンビネータとモナド スタイルを拾いました。

Direct Style は常に Direct Style Monadic Parser として表示されます

アロー スタイルがParsec に登場: Direct Style Monadic Parser Combinators For The Real World私はこれをすべて読んでいません。

編集

提案ごと

コンビネータ スタイル

0 投票する
1 に答える
500 参照

scala - scala コンビネータを使用して命題論理を解析する

私は大学での宿題で、Scala コンビネーターを使用して命題論理を解析するように指示されました。これに数時間取り組んでいて、問題を解決することさえできないので、髪を引き裂こうとしています。最初の段階。

最初の部分は、指定された EBNF 形式に準拠する認識タイプ (タイプは既に個別に提供されています) を構築するレコグナイザーを構築することです。([] は 0 または 1 を意味し、+ は 1 つ以上を意味し、* は 0 以上を意味します)

コンビネータで与えられた scala コードは、エラーである prop の遅延定義を提供します。という感じで上のコードに合わせてクラスを埋め始めたのですが、実装しても正しいエラーをキャッチできず、実際には値をキャッチする指定の仕方が分かっていないのだと思いますパーサー

構文のより良いアウトラインへのヒントを形成する助けは信じられないほどの助けになるでしょう。これは、命題論理とパーサーに慣れている人にとってはかなり簡単な問題であることは理解していますが、私は何時間も頭を悩ませており、少しずつハッキングすることに近づいています.

編集: 更新指定された構文は 1 つの項目で間違っていたので、微調整したところ、完全に機能するようになりました:

0 投票する
2 に答える
4641 参照

scheme - 「TheLittleSchemer」でのYコンビネータの議論

そのため、この関数用に適用可能なYコンビネータが開発されているTheLittleSchemerの第9章の終わりを読んで再読することに多くの時間を費やしましたlength。私の混乱は、2つのバージョンの長さ(コンビネータが除外される前)を対比する単一のステートメントに要約されると思います。

170ページ(第4版)は、A

引数に適用すると関数を返します

Bが

関数を返しません

これにより、自己アプリケーションの無限後退が発生します。私はこれに困惑しています。Bがこの問題に悩まされている場合、Aがどのようにそれを回避するのかわかりません。