問題タブ [iso-prolog]
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.
stream - Prolog でストリームを読み取るときは常に「.\n」を使用する必要がありますか?
パイプを使用して 2 つの Prolog プロセスを通信していますが、パイプからメッセージを読み取る述語に到達するたびにread/2
、プログラムがブロックされ、そのままでした。なぜそうなったのか理解できませんでしたが (非常に単純なプログラムで試しました)、最終的に次の 3 つのことに気付きました。
write/2
を使用してメッセージを送信するたびに、送信者プロセスはそのメッセージを で終了する必要があります.\n
。メッセージがこのように終わらない場合、受信プロセスはread/2
述語でスタックします。- 送信者が出力をフラッシュしない場合、メッセージはパイプ バッファに残されません。当たり前のように思えるかもしれませんが、最初はそうではありませんでした。
- メッセージがフラッシュされていない場合
read/2
はブロックされていますが、wait_for_input/3
まったくブロックされていないためflush_output/1
、そのような場合は必要ありません。
例:
これは動作しません:
それも機能しません:
これら2つが機能している間:
今私の質問はなぜですか?Prolog がパイプからの読み取り時にピリオドで終わる行全体を「受け入れる」だけである理由はありますか (実際には、読み取りたいストリームから読み取ります)。read
そして、ブロックしないのにブロックするのはなぜwait_for_input/3
ですか (メッセージがフラッシュされていないと仮定して)?
ありがとう!
prolog - プロローグ: 句はソース ファイルにまとめられていません
私はこのコードを持っています:
次のエラーが表示されます。
このエラーの目的は何ですか?
つまり、ファイルは正常にコンパイルおよび実行され、エラーの意味を認識しています。しかし、なぜ?
これは、ベスト プラクティスを実施するための単なる通知ですか?
私は論理プログラミングに非常に慣れていません。
ありがとう!
prolog - GNU と SWI で動作する Prolog コードの作成
これには制限があることは承知していますが、GNU または SWI のいずれかで合理的に機能するように、Prolog コードに条件付きディレクティブを配置する合理的な方法はありますか? sumlist
少なくとも、 SWI やGNUなどの組み込み述語sum_list
のスペルが一致しない最も単純なケースを考えています。または、SWI にはありますassert
が、GNU にはありません。したがって、次のようなものがあればいいでしょう。
または単に:
または、そうではありません。条件付きディレクティブは両方の言語に存在しますが、この種のことを行うために必要な条件を提供するまでには至らないようです。手動検索では見つからなかったものを見逃している可能性があります。
prolog - Prolog述語の引数におけるインスタンス化モード標識の意味
Prolog のドキュメントを見ると、述語の署名は次のように記述されている場合があります。
:
、+
、-
およびfor とは何?
ですか? また、それらをどのように解釈すればよいですか? また、存在するのはこれらだけですか、それとももっとありますか?
prolog - プロローグの構文について
X = a:b または X = ab のような用語を時々見かけます。
X = Y:Z のような要求を行うことができ、コンパイラは Y を a に、Z を b に統合します。
今私の答え: 2 つの Prolog アトムを結合するために使用できる文字 (または文字のシーケンス) は?!
この問題に関する詳細情報へのリンクを教えてください。
ドイツからのあなたの助けと親切な敬意に感謝します
prolog - Prolog の pi で型エラーが発生するのはなぜですか?
pi
私が書いているPrologプログラムの一部として使用しています。pi
プログラム全体での唯一の言及は次のとおりです。
ただし、プログラムを実行すると、次のエラーが発生します。
の呼び出し/使用に関して何か間違ったことをしていpi
ますか? 助けてくれてありがとう!
integer - gprolog の最小/最大整数は何ですか?
gprolog の最小/最大整数は何ですか? 「マジックナンバー」を使わずにこれらの数字を参照する方法はありますか?
prolog - Prolog オペレーター定義に xfx があるのはなぜですか?
Java や C など、演算子を使用した構文糖衣(インフィックス) を許可する言語では、優先順位と結合性を使用します。
Prolog は結合性も使用します:
左結合 - yfx
右結合 - xfy
しかし、なぜxfxがあるのですか?
私がインターネットで見つけた唯一のことは、これ以上明確にすることです
xfx は、演算子が分岐を「支配する」ことを意味しますが、xfy または yfx は、同じ優先度の式をチェーンできるという意味で「リスト構築」を表します。
from: CapelliCによる演習での Prolog の演算子の解釈
xfy と yfx が失敗する/意味がないために xfx が必要な例を回答に含めることができれば、それは高く評価されます。
Prolog の参照用: Prolog 組み込みディレクティブ op
虚偽のメモ として:
上記のリンクで指定した演算子は、標準と SWI の両方とは異なることに注意してください。それらは少なくとも10年は時代遅れです。例として、それはする必要があります
current_op(200,fy,-)
。
CapelliCとfalseによる 2 つの現在の回答を読んだ後、より関連性の高い情報を見つけるためのキーワードは非連想であることが明らかになりました。そのため、非関連セクションに注意を払うと、演算子の結合性がxfxに関してより意味を持つようになりました。