問題タブ [prolog-directive-dynamic]
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-Prolog ダイナミック/1 vs ダイナミック/2
私は独学で Prolog を学んでおり、いくつかの例が与えられています。
そのうちの 1 つはdynamic/1
組み込みディレクティブを使用します。
ダイナミクスの考え方が分かります。それは、アサートを介して述語を変更し、述語を撤回できます。
ただし、プログラムは次の場所も使用します。
2 つの /1 と /2 の違いは何ですか。また /3 .... /n ですか?
prolog - Prolog で動的述語を処理する正しい方法
ロボット システムのナレッジ ベースを書いています。システムは、実際には 2 つの部分で構成されています。KB のルールと、センサーの読み取りによって生成された一連の述語です。
たとえば、可能なルールは次のとおりです。
検知システムは、次のような述語を生成します。
ワークフローは、センサーによって生成された述語を参照し、ルール エンジンを参照してから、何をすべきかを問い合わせることで構成されます。(つまり do(X))
問題は、(たとえば) canSee述語がセンサーによって生成されない場合、ルールdo(shoot(E))を見たときにプロローグが未定義の手順について文句を言うことです。
考えられる回避策は、ルールで基本述語 ( canSee(nothing)など) のリストを生成することですが、これが最善の方法であるかどうかはわかりません。
何か案は?
csv - 複数のテーブルの csv 読み取りの適応
私は次のものを持っています:
prepare_db が column_keys と mb の述語を定義するために 2 つの追加引数を取ることができるように、これを適応させる最良の方法は何ですか。
例えば?-prepare_db('my_file.csv',mb_column_keys,mb).
mb/3 および mb_column_keys/1 に対してファクトがアサートされる結果になります
OK、ファイルを次のように変更しました。
しかし、それは少し醜いように見えます.これを達成するためのよりエレガントな方法はありますか?
prolog - current_predicate/1 は :- dynamic では機能しませんか?
Prolog でアサートを使用して定義する述語がいくつかあります。
current_predicate/1
アサートが実行されたかどうかを知るために使用しています (1 つの値のみをアサートする必要があります)。
しかし、swipl
不平を言い続けます:
そこで、 を追加したの:- dynamic amountOfStudentsInCourseAsserted/2
ですが、残念ながら、これは述語を current_predicate(Predicate). に追加します。したがってcurrent_predicate/1
、この動的ネーミングを使用していると、もう使用できません。
current_predicate/1
動的な名前には当てはまらない別の述語はありますか?