問題タブ [prolog-assert]

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 に答える
26926 参照

prolog - Prolog-アサーションとリトラクト

assert述語を宣言した場合は、ファクトやルールなどを追加するために使用できることを知っていますが-:dynamic、これにより、たとえばPrologウィンドウを閉じた場合など、そのセッションでのみ行われた変更を保持できます。その後、データベースの変更は失われます。

だから私は疑問に思っていました、assertそしてretract述語がProlog.plファイルに恒久的な変更を加えることができるようにする方法はありますか?

ありがとう

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

dynamic - 既存のプロローグ ファイルへのファクトの追加

元の内容を上書きせずに、既存の Prolog ファイルにファクトを挿入するのに問題があります。

ファイル test.pl があるとします:

これをプロローグにロードし、さらに事実を主張すると:

私は次のようにしてこれを保存できることを知っています:

これは機能しますが、test.pl には ":- dynamic Born/2" ではなく事実のみが含まれるようになりました。

このファイルをリロードすると、":- dynamic Born/2." のため、test.pl にファクトを挿入できなくなるため、これは問題です。もう存在しません。

私はどこかでそれを読んだ、私はできる:

これはファイルの最後に追加するだけですが、次のエラーが発生します。

ところで、私は Sicstus プロローグを使用しています。これは違いがありますか?

ありがとう!

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

prolog - グローバル変数をエミュレートするためのアサートとリトラクト

グローバル変数をエミュレートするためにこれを行っています:

別の方法はありますか?(変数を引数として渡すことに加えて、つまり)。必ずしもより効率的であるとは限りません。ただ興味があります。

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

prolog - Prolog で、このクエリがこの特定の結果を返すのはなぜですか

このクエリの効果と、この特定の結果が返される理由は何ですか?

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

prolog - SICStus Prolog /SWI-PrologREPLでの述語の定義

http://cs.union.edu/~striegnk/learn-prolog-now/html/node3.html#subsec.l1.kb1を読んでいますが、次の述語の実行に問題があります。

一方、ファイルに書き込んでファイルを参照して実行すると、正常に機能しているようです...

後でそれらを参照する必要があるファイルでのみ述語を定義することは許可されていますか?エディター自体でそれを行うことはできませんか?

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

input - ユーザー入力から新しいルールをアサートする方法(PROLOG)

ユーザーの入力を受け入れたい、つまり[garfield, hates, blacky]hates/2現在は存在しません。

私のデータベースでは、

しかし、これは機能しません。変数を述語およびファクトとして使用することは可能ですか?または、これを達成する他の方法はありますか?

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

prolog - プロローグでデータベースからファクトを呼び出す

assert(....)を使用して、指定された文脈自由文法をデータベースに挿入しまし た。文法が次のような場合

この文法はデータベースに挿入されます。データベースで cfg の文を生成するには、dcg を作成する必要があります。たとえば、この方法で dcg を定義した場合myDcg('S',str)「S」 (非終端) を呼び出すか、aSbまたはc|dなどで置き換える必要があります。

問題は、文を生成するために非終端記号 ('S') に遭遇するたびに、データベースから事実によって'S'を呼び出す/置換する方法です。

私の質問を理解していただければ幸いです。そうでない場合は、質問を編集してみます。


以下(サンプルコード)はまさに私がやりたかったことですこれはdcgではありません。

端末に遭遇するたびにそれを出力する必要があり、非端末に遭遇するとバックトラックします。

0 投票する
3 に答える
11630 参照

memory - Prolog-メモリをクリアして最初から始める方法は?

.plファイルでアルゴリズムを開発し、コマンドウィンドウのクエリで調べています。動的変数を使用し、述語をリトラクト/アサートします。そして、plファイルを変更して「変更されたファイルを再ロード」をクリックすると、不要な追加の事実があります。

たとえば、最初はcounter(0)があります。

そして私は何かをし、このカウンターを撤回してアサートすると、counter(7)になります。次に、変更したplファイルをリロードすると、両方のcounter(0)があります。およびcounter(7)。

これを防ぎ、counter(0)のみを使用するにはどうすればよいですか。初めに?

前もって感謝します。

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

prolog - assert/1 で変数を使用できますか?

私が今持っているものは、X(Y) が私の小さな DB で受け入れられた事実ではないことを確認します。X(Y) は false を返すため、それをアサートしようとします。(X が事実ではなく規則である場合、これは問題を引き起こすことを認識しています)

たとえば、この事実がDBにあるとしましょう

ifNotAdd(哺乳類、ゾウ) に質問します。

私はそれを見たいですか?哺乳類(ゾウ)。は false で、哺乳類 (象) をアサートします。

明らかに「assert(X(Y))」です。行が間違っていますが、何に置き換えますか? 答えを求めてプロローグのドキュメントとフォーラムを探していますが、今のところうまくいきません。私はまた、これを自分で行うものを書き込もうとしています。

編集 ユーザーが対話できる動的データベースを作成するには、DB を編集する必要があります。私は引数マシンを構築していますが、システムがドメイン外の知識を処理できるように、ユーザーが「事実を確実に知っている」ことをシステムに伝えることができるようにする必要があります。

http://en.wikipedia.org/wiki/Reason_maintenanceの流れで

乾杯、

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

prolog - プロローグで動的な事実を作成したい

私は次の簡単なコードを書きました。「男性」と書くと、このコードは「男性ですか?」と尋ねられることを期待しています。「いいえ」と入力すると、画面に「彼女は女性です」と表示されます。

しかし、このコードには次のエラーがあります:

swi-prologのエラーは次のとおりです。