問題タブ [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 に答える
113 参照

prolog - このルールのすべての結果をファクトとしてプログラムに入力する方法、またはこれらの結果をファクトとして処理するにはどうすればよいですか?

私はAssertを使用することを考えましたが、どのように機能するのかよくわかりません.. .

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

prolog - SWI-Prolog - アサートに失敗

次のように演算子を定義します。

次のようなものを試すと:

Prolog で、「static_procedure (=>)/2 を変更する権限がありません」というエラーが発生します。

解決策はありますか?

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

prolog - Prolog - 新しいデータベースにアサートする

私の質問に答えるために、コード スニペットは必要ないかもしれません。

ルールを呼び出すたびに、空白の「listofQuestions」にアサートしたいと考えています。これは、プロローグ ウィンドウを閉じて再起動した場合にのみ発生します。

助言がありますか?

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

list - プロローグを持つユーザーに適したゲームを推測する

ユーザーが質問に答えてゲームを見つけるプログラムを作成しようとしていますが、リストとアサートの操作方法がわかりませんでした。プロシージャポイントシステムで別の方法を試しました。プログラムは次のようになります。

プログラムを実行すると、結果は次のようになります。質問に答えて、あなたに合ったゲームを見つけてください!ゲームは : undefined true だと思います。

なぜこの方法が間違っているのか理解できません。最大のポイントを持つゲームを見つけて印刷できるように、アサートまたはリストでこれを行うにはどうすればよいですか?

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

prolog - Prolog で findall または assert/retract を使用せずに、要素をリストに追加したり、知識ベースからそれらを計算したりするにはどうすればよいですか?

次のようなファイル「students.pl」に学生データベースで構成されるナレッジベースがあります。

「findall」または assert/retract を使用せずに、ナレッジ ベースから各学生の述語にアクセスし、各科目の平均点または平均パーセンテージを計算したいと考えています。次のようにバックトラッキングを使用したい場合があります。

このアプローチでは、各要素にアクセスして書き込むことができますが、各「パーセント」値を要素としてリストに追加するか、「Percent1 is Total + Percent」のような述語を使用してパーセント値を合計してから見つける場合その平均、どうすればそうできますか?ナレッジ ベースは非常に大きいため、findall やrettract/assert を使用したくないことに注意してください。

どんな助けでも大歓迎です。

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

dynamic - 入力に応じて選択する特定のルールを決定するProlog

私は回避できないこのプロローグの問題を抱えています。私が達成しようとしているのは、FACT Aをアサートし、入力があったときにFact Bを撤回することです。つまり、Fact Bを取得してアサートし、入力が入ったときにFactAを撤回します。

すなわち:

私はそれを機能させることができません:どんな助けもいただければ幸いです。

編集:投稿されたすべてのコード

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

prolog - 主張された事実を Prolog に保存する

プロローグで、たとえば次のような事実を主張すると:

この事実をファイルに保存するにはどうすればよいですか?

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

list - 予測不可能な動的述語の動作

さまざまな述語にまたがるリストに要素を追加する必要があるという問題があります。引数ベースのリストを使用するのではなく、動的リスト述語を使用することにしました。簡単な例を以下に示します。最初に使用したときは問題なく動作しましたが、現在は引数を X として使用すると、プログラムを閉じて再コンパイルした後でも、リストから以前の引数データを取得し続けます。何が悪いのか誰か知っていますか?

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

prolog - グローバル (または状態) 変数を実装するために Prolog で assert とrettractall を使用しないようにする方法

Prologでは、最初に述語に格納された値を取得し、次に値を再計算し、最後にretractallandを使用して値を格納することによって、いくつかの算術計算 (またはプログラム全体で重要な状態情報) を含むコードを記述することがよくあります。assertを使用して変数に値を2回割り当てることはできませんis(したがって、変更が必要なほとんどすべての変数がグローバルになります)。これは Prolog では良い習慣ではないことがわかりました。この点について、私は次のように尋ねたいと思います。

  1. Prologでそれが悪い習慣なのはなぜですか(私自身は、一種の柔軟な(変更可能な)変数を持つためだけに上記の手順を実行するのは好きではありませんが)?

  2. この慣行を回避する一般的な方法にはどのようなものがありますか? 小さな例は大歓迎です。

PS Prologの学習を始めたばかりです。C言語などのプログラミング経験があります。

さらに明確にするために編集

私が言いたいことの悪い例 (win-prolog) を以下に示します。

次に、次のようにクエリできます。

ここでは、非常に些細なことですが、実際のプログラムやアプリケーションでは、上記のグローバル変数の方法は避けられません。...のような上記のリストassert(value(0))が非常に長くなり、より多くの変数を定義するためのアサート述語がさらに多くなることがあります。これは、異なる関数間の値の通信を可能にし、プログラムの実行中に変数の状態を保存するために行われます。

最後に、もう 1 つ知りたいことがあります。回避するためにさまざまな解決策が提案されているにもかかわらず、上記の慣行が避けられなくなるのはいつですか。

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

prolog - false を強制するアサートを生成する方法は?

まず第一に、あなたの助けに感謝します.

私の問題について:私が持っているとしましょう:

その上に、次のようなルールをアサートしたいと思います。

これはsome_fact:- true.、ルールを削除せずに " " を強制的に false に変換したいためです ( を使用したくありませんabolish(some_fact,0).) 。

問題は、asserta/1 にコンマを配置できないため、それを行う方法が見つからないことです。私が言いたいのは、私が置くとき:

間のコンマは、ルール全体で asserta/1 ではなく asserta/2 への呼び出しを強制します。これは文字列をアサートするため、引用符を使用してそれを防ぐことはできません。

もちろんasserta(some_fact:- fail).、プロローグは true を返す次の some_fact を検索するため、単純に置くことはできません。

何か案は?再度、感謝します!