問題タブ [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.
prolog - 再帰を使用しない階乗計算
プロローグの遡及のみを使用して、再帰を使用せずに階乗計算 (n!) のソリューションを実装しようとしています。例えば:
固定事実factorialを使用して、たとえば、2 の階乗を発見するために述語retroactionを呼び出すと、正しい答えが得られます。
私が実装しようとしている解決策は次のとおりです。
1 より大きい数値の階乗を取得しようとすると、機能しません。誰かが理由を知っていますか?
prolog - Prolog を使用した入力の読み取り
これが明らかである場合は申し訳ありませんが、私は最近プロローグを学習しており、レコメンダー システムで使用するデータを読み込もうとしています。
前のコードは、ユーザーが使いたい金額を読み取ってから、贈与者の性格について尋ねる必要がありますが、最初の質問だけが尋ねられます。新しい行に到達したようですが、述語をアサートしていないようです:
?- will_spend(30)。[警告: 未定義の述語: will_spend/1']
これはなぜですか、私は何を間違っていますか?助けてくれてありがとう。
prolog - データベースで事実を更新/追加する最良の方法は?
次のような事実があるとします。
私はこのようなものが欲しい(疑似コード):
私は2つの異なる方法を試しました。最初はあまり好きではない :
2番目は機能しません:
whenFact
が成功しない場合はAmt
インスタンス化されないため、常に取得しNewAmt is Val
ます。
dynamic - PROLOGは機能していません
述語のリストから項目を削除する必要がありますが、機能していません。私にはtrueが返されますが、アイテムはまだそこにあります。
コード:
prolog - エキスパート システムでのプロローグと「逆」出力
私はプロローグが初めてです。次のような単純なエキスパートシステムの実行方法を理解することができました
そして、これは良いことですが、問題は、「バック」出力を行う方法です。たとえば、プロローグ ウィンドウに「タンク」と入力すると、このタンクを構成するすべてのパーツが表示されます。銃、はい、短いライフルなどです。はい、翼 - いいえなど
このようなエキスパート システムで実行することは可能ですか、それとも別のプログラムを実行する必要がありますか?
お返事ありがとうございます
prolog - Prolog: 一重引用符と二重引用符の異なる動作
私はPrologを初めて使用し、理解できないことに遭遇しました。
これは私のコードです:
データベース内のユーザー情報を更新するには、
changeAge/2
次の 3 つの手順を実行します。
- を使用して、正しいレコードを検索し
user/3
ます。 - を使用して、データベースから一致するレコードを 1 つ削除します
retract/1
。 - を使用して、更新された新しいレコードをデータベースに挿入します
assert/1
。
これは私のコンソール出力です:
二重引用符が私に与えられるのに (行 4) 一重引用符が私に与えるのはなぜですかtrue
(行 2 false
)?
prolog - abolish/1 とrettractall/1 の違いは何ですか?
説明書を読んでも、両者の違いがわかりません。
マニュアルには次のように書かれています。
動的述語のすべての句を消去するには、retractall/1 を使用することをお勧めします。
そこでretractall/1
、プログラムで使用することにしました。しかし、私は違いが何であるか疑問に思います。
list - How to use dynamic databases in Prolog?
I have written the following program, which calculates the longest non-decreasing sub-sequence of input array.
The sub-program to find the longest list from the list of lists is taken from stackoverflow (How do I find the longest list in a list of lists) itself.
I have used the Prolog dynamic database for memoization purpose. Though the program with database runs slower than the program without database. Below are the comparative times between two runs.
I would like to know if I am using the dynamic database correctly. Thanks!
prolog - プロローグ: assert を含むルールは、最初の結果のみをファクトに追加します
私はいくつかのものを事前計算し、結果をプログラムの最初に事実として保存しようとしています:(簡略化されたコード)
しかし、SICStus Prolog でファイルを参照すると、最初の結果 cost(1,20) のみがアサートされます。
しかし、SICStus プロローグ コンソールで assert_all の右側を直接入力すると、両方のコスト/2 ファクトが存在します。
この動作は非常に紛らわしいと思います。何が起こっているのでしょうか?