問題タブ [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.
lambda - 魔法の森でKコンビネータを作成するにはどうすればよいですか?(モッキンバードを嘲笑する)
Kコンビネータは定数関数であることを思い出してください。常に最初の引数を返します。
「モッキンバードをモックする」という本の中で、著者は話す鳥を含む魔法の森の例を示しています。鳥には行動があります:
鳥AとBがあれば、BからAの名前を呼び出すと、Aはあなたに鳥の名前を呼び出すことで応答します。この鳥はABによって指定されます。
森がA、B、Cの3羽の鳥で構成されているとします。少なくとも1羽の鳥がKコンビネータのように振る舞うことは可能ですか?
以下は、魔法の森の鳥の可能な行動のセットを示す表です。最初の列には、森の中の各鳥の名前があります。一番上の行には、各鳥に呼び出される可能性のある名前があります。体は名前に対する鳥の反応です。たとえば、鳥AにAの名前を呼び出すと、鳥AはCで応答します(行2、列2を参照)。簡潔に言えば、AA =Cです。鳥AにBの名前を呼び出すと、鳥AはBで応答します(行2、列3を参照)。簡潔に言えば、AB = Bです。ACの空のスロットにはどのような値を入れる必要がありますか?
鳥AをKコンビネータのように動作させることができるかどうかを見てみましょう。上記の値のセットは有望に見えます:
すべてのyについてAA=CおよびCy=A。つまり、すべてのyに対して(AA)y=Aです。
すべてのyについてAB=BおよびBy=B。つまり、すべてのyに対して(AB)y=Bです。
空のスロット(AC)にはどのような値を配置する必要がありますか?すべての場合を考慮してください:
AC = Aの場合、Ayの値はすべてのyに対してCでなければなりませんが、これは明らかに誤りです。したがって、Aを空のスロットの正しい値にすることはできません。
AC = Bの場合、Byの値はすべてのyに対してCでなければならず、これは明らかに誤りです。したがって、Bを空のスロットの正しい値にすることはできません。
AC = Cの場合、Cyの値はすべてのyに対してCでなければなりませんが、これは明らかに誤りです。したがって、Cを空のスロットの正しい値にすることはできません。
したがって、すべてのyについて、条件(AC)y=Cを満たすために空のスロットに値を配置することはできません。
私の知る限り、鳥をKコンビネータのように振る舞わせることは不可能です。あなたが私を間違っていると証明してくれることを願っています。
.net - IObservable サブスクリプションの自己エラー依存の自己破棄
次のような F# コードがあります。
どこ
- 失敗する
csまで保持する最も慣用的な方法は何ですか?c.SendAll - 失敗した場合にサブスクリプションが破棄される
Observable.subscribeUntilError(action)場所を定義することはできますか?actionそうでなければ、押し続けるaction限り実行されますか?IObservable
clojure - clojureは混合アリティ関数のチェーンを評価し、必要に応じて部分関数を返すことができますか?
以下のように、アリティ1、2、3の3つの関数があるとします。
clojureには、以下を評価するための評価関数またはイディオムがありますか?
アリティ2のparital関数を返しますか?
上記の単純な関数定義を取得して、部分的な結果を返すことができるマルチアリティ関数に拡張できるマクロを作成することを検討しています。これを実現するための組み込みの方法または慣用的な方法がすでにある場合は、マクロを作成したくありません。
上記の関数に対して展開されたマクロが必要とするものは次のとおりです。
ruby - ルビーにイオタを実装する
改めてお詫び申し上げます。ここでHaskellの実装に関して以前にこの質問をしましたが、これがどのように機能するかについて頭を悩ませることはまだ困難です。また、ミニマリズムプログラミング言語の概念は絶対に魅力的であり、それから逃れることはできません...とにかく、これは関数型プログラミングの美しさについて懐かしい場所ではありません。
それで!難解プログラミング言語に関するウェブサイトを見つけ、Iotaを発見しました。Iotaは間違いなく最小の関数型言語です。詳細については、「Iota and Jot:最も単純な言語?」を参照してください。スキームでのIotaのリファレンス実装は次のとおりです。
しかし、RubyでのScheme実装と同等のエレガンスを試してみると、「悪いproc」が吐き出されてしまいます。誰かがRubyがこのように動作している理由と、これをより適切に実装する方法を理解するのを手伝ってもらえますか?これを機能させようとしている間、私はS、、、を読みやすくするためKにBASIS分離しました。
下部に2つのテストを含めました。最初はI(BASIS[BASIS])を返す必要がありますが、代わりに、と同じ結果を生成しないprocを返しますI。2番目のテストはを返すはずKですが、代わりにエラーを返します。
lisp - Lispの固定小数点コンビネータ
この構造を理解したい。誰かがこのコードについて明確で簡単な説明をすることができますか?
たとえば、Y の式を忘れたとします。どうすればそれを覚えて、作業を行った後でも再現できるでしょうか?
parsing - Scalaパーサーリーダー入力の前処理
オブジェクトのテキスト表現を含むファイルがあります。テキストを解析してオブジェクトを返すコンビネーターパーサー文法を作成しました。本文中の「#」はコメント区切り文字です。その文字から行末まではすべて無視されます。空白行も無視されます。非常に大きなファイルを処理できるように、一度に1行ずつテキストを処理したいと思います。
パーサーの文法を一般的なコメントと空白行のロジックで乱雑にしたくありません。前処理ステップとしてこれらを削除したいと思います。ファイルを行上のイテレータに変換すると、次のようになります。
そのような式の出力をコンビネーターパーサーに渡すにはどうすればよいですか?Readerこのようなフィルタリングされた式からオブジェクトを作成する方法がわかりません。JavaFileReaderインターフェースはそのようには機能しません。
これを行う方法はありますか、それともパーサー文法にコメントと空白行のロジックを入れる必要がありますか?後者の場合、util.parsingすでにこれを行っているパッケージはありますか?
lambda - ラムダ計算でのスタックデータ構造とその主な操作の定義
stack固定小数点コンビネータを使用して、ラムダ計算でデータ構造を定義しようとしています。2つの操作、insertionおよびremoval要素のso、pushおよびを定義しようとしてpopいますが、定義できた唯一の操作である挿入が正しく機能していません。削除の定義方法がわかりませんでした。
これが私の操作に対するアプローチであり、 :pushの定義です。stack
私のスタックは、一番下を示す要素で初期化されています。私は0ここを使用しています:
しかし、今、別の要素を挿入しようとすると、初期構造が分解されているため、機能しません。
STACK定義または定義を修正するにはどうすればよいですか?また、操作PUSHを定義するにはどうすればよいですか?POP再帰を許可するには、コンビネータを適用する必要があると思いますが、その方法がわかりませんでした。
参照: http: //en.wikipedia.org/wiki/Combinatory_logic
ラムダ計算でのデータ構造の定義に関する詳細な説明や例をいただければ幸いです。
haskell - Haskell: ((.).(.)) fg が f と等しいのはなぜですか。gx?
((.).(.))という表現の意味を教えてください。私の知る限り、(.) の型は (b -> c) -> (a -> b) -> a -> c です。
