問題タブ [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.

0 投票する
1 に答える
979 参照

casting - SICStus Prolog アトムから文字列へ

Prolog アトムを整数に変換する必要があります。例えば:

それについていくつかのSOの回答を見たことがありますが、それらはSWI-Prologに依存しており、SICStus Prologを使用せざるを得ません。number_codes/2述語を認識しているため、文字列へのキャストも機能します。

ご協力いただきありがとうございます。

0 投票する
2 に答える
134 参照

prolog - プロローグで演算子を定義する

次の方法で関連付ける新しい演算子を定義する必要があります

括弧は、新しい op の結合性を理解するために使用されました。

そう。

A と B の値はどちらになりますか。

前もって感謝します。

0 投票する
1 に答える
472 参照

prolog - プロローグ、端末で正しい答えを得るが、プログラムの実行時に間違った答えを得る

ターミナルで「prolog」と入力すると、次のようになります。

タイピング:

取得:

次にEnterを押すと、次のようになります。

タイピング:

取得:

ファイルを書くとき; これで構成されるtest.pl:

そして、ターミナルに次のように書き込みます。

私は得る:

ここでの答えはノーであるべきではありませんか?私は何を間違っていますか。また、プロローグでこれを行う方法は次のとおりです。

つまり、プロローグのトップ レベルにクエリを送信し、回答を取得したい

0 投票する
8 に答える
1157 参照

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) は
、用語Xterm-precedes が term に先行するかどうかを定義しYます。

XYが同一の用語である場合、 X term_precedes Y
Y term_precedes Xは両方とも false です。

Xとの型が異なる場合Y: Xterm_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/2iso_dif/2

だから私の質問は何ですか: ISO Prologで対応する安全な用語比較述語を定義 (および名前付け) する方法は? 理想的には、明示的な用語トラバーサルなしで。たぶん明確にするために:上記iso_dif/2では、トラバーサルという明示的な用語を使用していません。と の両方が内部的に用語(\==)/2(\=)/2トラバースしますが、このオーバーヘッドは(=..)/2orによる明示的なトラバーサルと比較して非常に低くなりますfunctor/3, arg/3