問題タブ [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.
casting - SICStus Prolog アトムから文字列へ
Prolog アトムを整数に変換する必要があります。例えば:
それについていくつかのSOの回答を見たことがありますが、それらはSWI-Prologに依存しており、SICStus Prologを使用せざるを得ません。number_codes/2
述語を認識しているため、文字列へのキャストも機能します。
ご協力いただきありがとうございます。
prolog - プロローグで演算子を定義する
次の方法で関連付ける新しい演算子を定義する必要があります
括弧は、新しい op の結合性を理解するために使用されました。
そう。
A と B の値はどちらになりますか。
前もって感謝します。
prolog - プロローグ、端末で正しい答えを得るが、プログラムの実行時に間違った答えを得る
ターミナルで「prolog」と入力すると、次のようになります。
タイピング:
取得:
次にEnterを押すと、次のようになります。
タイピング:
取得:
ファイルを書くとき; これで構成されるtest.pl:
そして、ターミナルに次のように書き込みます。
私は得る:
ここでの答えはノーであるべきではありませんか?私は何を間違っていますか。また、プロローグでこれを行う方法は次のとおりです。
つまり、プロローグのトップ レベルにクエリを送信し、回答を取得したい
sorting - ISO Prolog で対応する安全な用語比較述語を定義 (および命名) する方法は?
標準用語順序 (ISO/IEC 13211-1 7.2 用語順序) は、変数を含むすべての用語に対して定義されます。これには良い用途があります — の実装を考えてみてsetof/3
ください。これにより、8.4 用語比較のビルトインのクリーンで論理的な多くの使用法が、あらゆる場所で imps (命令型構造の短縮形) を使用した宣言型の悪夢になります。8.4 用語比較機能:
8.4 用語の比較
8.4.1 (@=<)/2、(==)/2、(\==)/2、(@<)/2、(@>)/2、(@>=)/2。
8.4.2 比較/3 .
8.4.3 並べ替え/2 .
8.4.4 キーソート/2 .
例を挙げると、次のことを考慮してください。
これは成功するので、
7.2 タームオーダー
順序付けterm_precedes (3.181) は
、用語X
term-precedes が term に先行するかどうかを定義しY
ます。
X
とY
が同一の用語である場合、X
term_precedesY
とY
term_precedesX
は両方とも false です。
X
との型が異なる場合Y
:X
term_precedesY
の
型がの型のX
前にY
次の順序である場合:
variable
先行floating point
する 先行integer
する 先行atom
するcompound
。注 — 用語の順序をテストする組み込みの述語
は、8.4 で定義されています。
...
したがって、すべての変数は より小さいですa
。しかし、一度X
インスタンス化されます:
結果は無効になります。
それが問題です。これを克服するために、制約を使用するか、コアの動作のみに固執してinstantiation_error
.
7.12.2 エラー分類
エラーは次の形式に従って分類され
Error_term
ます。
a)引数またはそのコンポーネントの 1 つが変数であり、
インスタンス化された引数またはコンポーネントが必要な場合、インスタンス化エラーが発生します。
の形をしていinstantiation_error
ます。
このようにして、インスタンス化エラーが発生しない限り、結果が適切に定義されていることが確実にわかります。
の場合、制約を使用するか、クリーン インスタンス化エラーを生成するかの(\==)/2
いずれかが既に存在します。dif/2
iso_dif/2
だから私の質問は何ですか: ISO Prologで対応する安全な用語比較述語を定義 (および名前付け) する方法は? 理想的には、明示的な用語トラバーサルなしで。たぶん明確にするために:上記iso_dif/2
では、トラバーサルという明示的な用語を使用していません。と の両方が内部的に用語(\==)/2
を(\=)/2
トラバースしますが、このオーバーヘッドは(=..)/2
orによる明示的なトラバーサルと比較して非常に低くなりますfunctor/3, arg/3
。