問題タブ [unification]
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.
haskell - Haskellで型変数をインスタンス化する
編集:解決しました。ソースファイルで言語拡張を有効にしても、GHCiで言語拡張が有効にならないことに気づいていませんでした。解決策は:set FlexibleContexts
GHCiでした。
私は最近、Haskellのクラスとインスタンスの型宣言がホーン節であることを発見しました。そこで、 The ArtofPrologの第3章の算術演算をHaskellにエンコードしました。例えば:
Prologでは、値はプルーフの(論理)変数に対してインスタンス化されます。しかし、Haskellで型変数をインスタンス化する方法がわかりません。つまり、HaskellがPrologクエリに相当するものが何であるかがわかりません
は。私は
Haskellがインスタンス化する原因になりますxi
が、これを有効Non type-variable argument in the constraint
にしてもエラーが発生します。FlexibleContexts
prolog - 算術演算子が存在する場合のプロローグでの単一化の動作
私は期待していました
「優先順位」の問題はありますか?最新の swi-prolog リリースを使用しています。
variables - 置換 S とリスト X が与えられた場合、S を X に適用する方法
置換SとリストXsがあり、 Xsで発生する各変数はSでも発生するとします。リストS(Xs)、つまりリストXsに置換Sを適用して得られるリストを見つけるにはどうすればよいでしょうか。
より具体的には、次のような一連の述語と DCG ルールがあります。
リストに対してパターンPと変数を一致させようとすると、置換Sが返されます。
置換S = {X = c, Y = e}を変数XおよびYを持つリストXsに適用し、置換が行われたリストを受け取りたいのですが、問題にアプローチする最善の方法がわかりません.
Haskell でこの問題に取り組んでいた場合、変数から値への有限マップを作成してから、置換を実行します。同等のアプローチは、変数と値のペアの DCG ルールでリストを作成し、マップを使用して目的のリストを見つけることです。ただし、これは適切なアプローチではありません。
unification - Mercury の ":=" と "=>"
最近、Mercury で次のコード例を見つけました。
Prolog プログラマとして、通常の統合=
と、ここで使用されている:=
orの違いは何だろう=>
か?
Mercury リファレンスでは、これらの演算子の優先度は異なりますが、その違いについては説明されていません。
haskell - MonadPlus (ST a) インスタンスが必要
Typed Logical Variables in Haskellという論文を読んでいますが、最終的な実装の詳細を理解できていません。特に、セクション 4 で導入されたバックトラッキング状態トランスフォーマーです。何らかの理由で、私にはわかりませんが、GHC は、以下の functionに のMonadPlus
インスタンスが必要であると考えています。(ST a)
unify
何が問題なのか、どのように修正すればよいのかわかりません。ここまでは、前の議論とコードを理解したという印象を受けていましたが、どうやら間違っていたようです。誰かが何がうまくいかないのかを指摘できる場合-MonadPlus (ST a)
インスタンスが必要かどうか? - とても参考になります。
[編集: 明確化]著者mzero
は、または のバリエーションmzero
が適切な関数であると主張しているように見えることを指摘しておくべきでした。私は適切な機能が何であるかを知りません。私が疑問に思っているのは、MonadPlus (ST a)
インスタンスを作成することになっているのか、それとも正しい関数を使用していないのか、何かを読み違えてしまったのかということです。
variables - GHCは、型変数を統合できないとしてSTモナドコードを拒否しますか?
私は次の関数を書きました:
しかし、コンパイルしようとすると、次のエラーが発生しました。
誰か助けてもらえますか?
list - Prologで統合せずにリストのすべてのメンバーを削除する
これを書く場合、Prologで:
結果は次のようになります。
_ 変数は最初の要素で 1 にバインドされ、(1,1) のさらに要素を検索して削除するため、正常です。
この統合が行われ、フォーム (1,_) のすべてのメンバーが削除されないようにする方法はありますか。その場合、結果は次のようになります: L = [ (3, 4)]。
prolog - Prolog の == と = の違いは何ですか?
誰かが Prolog==
の と演算子の違いを説明できますか? =
X が Y と統合することをX = Y
意味し、X が既に Y と統合されているか、統合できる場合は true であることは知っていますが、これが とどのように異なるのかわかりません==
。
フォローアップ:それ(受け入れられた回答を参照)は理にかなっています。X \= Y
もう 1 つ質問ですが、が true でX \== Y
false である (またはその逆)という状況はありますか? つまり、X \= Y
統合できないかどうか、または現在統合されていないかどうかをテストしますか?
prolog - 統一パターンマッチングの奇妙な振る舞い
これが私の数独プロジェクトのリストです。次のようなリストがあります。
そして、これをフィルタリングして、自由変数のみを取得したいと思います。
それが欲しいので、私はこの述語を書きました:
電話するとき
SWI-Prologの回答
だから私は述語を少し編集しました:
そして今、それは期待通りに動作します:
それでも、最初のものの何が問題なのかわかりません。私にとって、SWI-Prologは0:0:0と_、および_:_:_と一致する必要があります。わからないものはありますか?それともSWI-Prologのバグですか?
悟りをありがとう!
f# - F#で統一アルゴリズムを探す
私はASTを変換しており、単純なパターンマッチング以上のものが必要です。したがって、統合アルゴリズムが必要です。
これは.NETプロジェクト用であり、.NET PROLOG実装と相互運用できることはわかっていますが、統合アルゴリズムを埋め込むだけで済みます。したがって、PROLOGはやり過ぎです。
F#で記述された「Martelli、Montanari:An Efficient Unification Algorithm」を入手できれば完璧ですが、HASKELLを含むすべての関数型言語を採用し、F#に翻訳します。