問題タブ [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.
prolog - Swi プロローグ エラー: true を表示しているが false を表示していない
W8 マシンに SWI-Prolog をインストールしたところ、エラーが発生しました。
エラーは次のとおりです。
プロローグ ソース ファイルに 1 つのファクトが含まれているとします。
したがって、バッファをコンパイルして取得します。
今私が入力すると
期待どおりの出力は ですtrue
。ただし、入力すると、
false ではなく、上記のエラーが表示されます。ここで何が起こっているのか誰か教えてもらえますか?
解決策: プロローグのバージョンが異なります。
standards - ISO-Prolog リファレンス実装はありますか?
ISO-Prolog には参照実装がありますか?
私はINCITS/ISO/IEC 13211-1:1995 (R 2007)を持っているので、それを示唆する必要はありません。
編集
注記:適合性テスト I: 構文
prolog - variable_names の再配置
avs_term_rearranged(AVs, T, AVsR)
givenAVs
などT
を使用して標準に準拠した方法で記述する方法。これAVsR
はAVs
、変数がT
.
AVs
は のような変数名を指定するアトムであり、 は対応する変数A = V
であるという形式の要素のリストです。このようなリストは、read-option (7.10.3) を使用して生成されます。さらに、要素の正確な順序は定義されていません。A
'X'
V
read_term/2,3
variable_names/1
T
AVs
プラスいくつかのすべての変数を含む項です。
標準準拠プログラムでは、変数の順序という用語に依存できないことに注意してください (7.2.1):
7.2.1 変数
X
とY
が同一でない変数の場合、X
term_precedesY
は、ソートされたリスト (7.1.6.5、8.10.3.1 j) の作成中に順序が一定のままであることを除いて、実装に依存するものとします。注 —
X
とY
が両方とも無名変数である場合、それらは同一の項ではありません (6.1.2 a を参照)。
8.4.3.4の例を考えてみましょう:
したがって、 がどのように機能するかは 2 つの方法が考えられますsort/2
。
例として:
prolog - SWI-Prolog の forall 句内で member を使用すると、要素は常に同じ順序で出力されますか?
最近 Prolog を始めたので、いくつかの単純なタスクに Prolog を使用してきましたが、以下の簡単な例のような forall ループ内で member を使用することに疑問を抱き始めました。
このようなことを行う場合、forall が呼び出されるたびにリスト内の要素を同じ順序で処理するというのは常に本当ですか? 次のようなことを言って強制する必要がありますか?
私が最初に行った小さな調査から、それは member/2 の動作に帰着すると推測していますが、SWI-Prolog の Web サイトにある関数のドキュメントは非常に簡潔です。しかし、確実ではありませんが、常に同じ順序で要素を抽出すると言って正しい道を進んでいる可能性があることを私に感じさせた member/2 に関する決定論について言及しています。
誰かがこれについて保証や説明をしてくれますか?
floating-point - swi-prolog での奇妙な算術演算
私は結果が非常に奇妙だと思います。なぜ0.3ではないのですか?この結果の理由を誰か教えてください。これを修正することは可能ですか。
2 番目の質問は、「時間」表記「13.45」---->「15.30」を時間数に変換するにはどうすればよいですか? たとえば、上記の計算された 15.30-13.45 の期間は 1.85 になります。しかし、残りの数字ではなく、時間の一部を操作する必要があります。15 1/2 - 13 /4 のように、この方法の方が優れています。私は試します
助言がありますか?
prolog - Sum の結果は floor(Col + Row + 1) が整数になることはなく、理由がわかりません
値を格納するために配列内のどの位置が使用されるかを計算するプロローグを作成する必要があります。ただし、これらの計算の結果は整数を返す必要があるため、floor/1述語を使用して値の整数を取得しますが、これは私のコードでは機能しません。3 ではなく 3.0 のように、小数点付きの数値を返し続けます。
以下は私のコードです:
の結果がSum is floor(Col + Row + 1)
整数になることはなく、その理由はわかりません。誰でもこれで私を助けることができますか?
prolog - 最高の Prolog プログラミング プラクティスとスタイル ガイドラインは何ですか?
OK、これは非常に一般的な質問であり、この件に関していくつかの論文が書かれていることは知っていますが、これらの出版物は非常に基本的な資料をカバーしていると感じており、スタイルと効率を改善するより高度なものを探しています. これは私が紙に持っているものです:
- 「調査レポート AI-1989-08 効率的なプロローグ: 実践ガイド」Michael A. Covington 著、1989 年
- 「効率的なプロローグ プログラミング」Timo Knuutila 著、1992 年
- Covington、Bagnara、O'Keefe、Wielemaker、Price、2011 による「Prolog のコーディング ガイドライン」
これらでカバーされる主題の例: 末尾再帰と微分リスト、インデックスの適切な使用、カットの適切な使用、アサートとリトラクトの回避、CONS の回避、コード形式のガイドライン (インデント、if-then-elses など)、命名規則、コードの文書化、引数の順序、テスト。
Prolog でのあなた自身の個人的な経験から、ここに何を追加しますか? CLP プログラミングにのみ適用される特別なスタイル ガイドラインはありますか? 一般的な効率の問題とその対処方法を知っていますか?
アップデート:
いくつかの興味深い (ただし、私にとってはあまりにも基本的で一般的すぎる) ポイントを以下に示します: Lifeware Team の Prolog プログラミング ガイドライン
問題全体を強調するために、「Prolog のコーディング ガイドライン」(Covington et al.) を引用したいと思います。
私たちの知る限り、Prolog のコーディング ガイドラインの首尾一貫した完全なセットは公開されていません。さらに、公開された Prolog プログラムのコーパスを見ると、事実上の標準が出現していません。この明らかな欠落の背後にある最も重要な理由は、包括的な言語標準がないため、小規模な Prolog コミュニティが、個々の Prolog システムを中心とするサブコミュニティにさらに細分化されており、いずれも支配的な地位を占めていないことです。