問題タブ [combinatory-logic]
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.
scala - scala コンビネーター微積分データ モデルの型推論
私はスカラでコンビネータ計算の非常に軽量なエンコーディングを試しています。最初は、S コンビネータと K コンビネータ、アプリケーション、および定数値を実装しているだけです。後で、スカラ関数を持ち上げて、式をスカラ関数として評価できるようにしたいと考えています。ただし、それは後ほど。これが私がこれまでに持っているものです。
ここで、これについていくつかの型推論を行いたいと思います。スモール ステップ リダクションとラージ ステップ リダクションの実装を簡単にするために、データ モデルは型指定されていないため、型をこの構造の外部に配置したいと考えています。型情報を保持するものを導入しましょう。
値型は簡単です。
アプリケーションはもう少しトリッキーですが、基本的には関数アプリケーションに要約されます。通常の scala アプリケーションとの混同を避けるために、コンビネータ アプリケーションに型 ⊃ を導入しましょう。
これは私が立ち往生するところです。S コンビネータと K コンビネータの型を表す必要があります。ただし、それらは普遍的に量化された型です。それらを適用し始めるまで、実際のタイプはわかりません。Kさんを例に挙げてみましょう。
これを使用しようとした最初の数回は、K を K[X, Y] としてパラメーター化しましたが、これは (壊滅的に) ポリモーフィック性が不十分です。K の型は、最初の引数の型を待ってから、次の引数の型を待つ必要があります。K を 1 つの値だけに適用する場合、次の引数の型はまだ固定されていません。(K x:X) を取得して、文字列、int、または好きな型に適用できるはずです。
したがって、私の問題は、S と K の typeOf を生成する暗黙の記述方法と、∀ 量化された型を正しく処理する方法です。ひょっとして、こんなものが欲しいのかな?
しかし、配管を行うために∀型をどのように記述すればよいかわかりません。∀ を正しく取得することに加えて、既存の A#typeOf =:= ⊃[ に加えて、 typeOfAp が A#typeOf =:= ∀[...] ケースを処理するための 2 番目の暗黙的なものがあると感じています。 ...] 1。
ありがとう、
マシュー
javascript - JavaScript の SKI コンビネーターで Y を表現する
私は JavaScript でコンビネータをいじっていて、S を動作させることを (できれば) 誇りに思っていましたが、ウィキペディアに出くわしたとき、「Y コンビネータは、SKI 計算で Y = S (K (SII)) ( S (S (KS) K) (K (SII)))」なので、それを試してみる必要がありました。
私は何を間違っていますか?私はその表現を正しく翻訳していませんか? これについて私が行っている方法に何か問題がありますか?それは理にかなっていますか?このようなものについて読まなければならないことのほとんどは、私の脳を爆発させたくなるだけなので、この演習の主なポイントは、表記法を理解しているかどうか (したがって、JavaScript に変換できるかどうか) を確認することでした。
ああ、ところで、私が再び読んだりいじったりしたのは、prototype.js が Prototype.K として実装しているものは、実際には I コンビネータであるということでした。誰か気づいた?
haskell - コンビネータの型シグネチャが、同等のLambda関数の型シグネチャと一致しません
このコンビネータを考えてみましょう。
引数XYに適用します。
それは以下に契約します:
S(SK)を対応するラムダ項に変換し、次の結果を得ました。
Haskell WinGHCiツールを使用して(\ xy-> xy)の型アノテーションを取得すると、次のように返されます。
それは私には理にかなっています。
次に、WinGHCiを使用してs(sk)の型シグネチャを取得すると、次のように返されます。
それは私には意味がありません。型アノテーションが異なるのはなぜですか?
注:s、k、およびiを次のように定義しました。
haskell - このコンビネータは何をしますか:s(sk)
私は今、次の型署名を理解していますs (s k)
:
そして、HaskellWinGHCiツールでエラーなしで機能する例を作成できます。
例:
を返します2
。
例:
を返します4
。
ここsuccessor
で、次のように定義されます。
それにもかかわらず、私はまだ何をするのかについて直感的な感覚s (s k)
を持っていません。
コンビネータs (s k)
は、任意の2つの関数f
とを取りますg
。とは何s (s k)
をf
しg
ますか?何をお願いするかについての全体像を教えていただけますs (s k)
か?
haskell - 文字列をGADTに解析する方法
HaskellでCombinatoryLogicを実装しようとしていますが、その言語のパーサーに書き込みたいと思います。パーセクを介してパーサーを機能させるのに問題があります。基本的な問題は、パーサーによって返されるオブジェクトが適切に型指定されていることを確認する方法が必要なことです。誰かがこれを行う方法について何か創造的なアイデアを持っていますか?
function - 関数名としてフォームを定義しますか?
このコードがSchemeで何を意味するのか知りたい:
ファイル全体はこちらです。
これは合法的なスキームですか?(K x) はパラメーター化された関数で、Java のジェネリック関数のようなものですか? MIT スキーム リファレンスを調べましたが、この種の定義については何も言及されていないようです。
c++ - オーバーロードされた関数の型の推定 - カリー化
呼び出し可能なオブジェクト (関数)a
と引数(または一連の引数) が与えられた場合、複数のシグネチャでオーバーロードされていることを考慮して、b
返される型を推測したいと思います。f
f
私の多くの試みの1つは
および 2 つのテンプレート オプションがコメント アウトされ、前のコードに含まれています。
何気なく使ってdeclval result_of auto decltype
ます。
オーバーロード解決プロセスはコンパイル時にどのように機能しますか?
私がこれでクリエイティブになろうとしている理由を知りたい人がいれば、C++11 で実行可能な/きちんとした方法でカリー化を実装しようとしているということです。