6

プロローグ初心者です。この例をコンパイルするための助けをいただければ幸いです。ルールは「結果:-前件」という形式になっていると思います

%rules
prey(Y2), watch(X2,Y2) :- predator(X2).
false :- predator(X1),prey(Y1),intelligent(Y1),watch(X1,Y1),catch(X1,Y1).
catch(X3,Y3);hungry(X3) :- predator(X3),prey(Y3),watch(X3,Y3).

%facts
predator(shaki).
prey(pelusa).
intelligent(shaki).
intelligent(pelusa).
watch(shaki,pelusa).

SWI-Prolog バージョン 5.10.4 (i386、Ubuntu Natty Narwhal) を使用してコードをコンパイルしました。

swipl -s "pathofthecode.pl"

Swi-Prolog は、2 番目のルールに対して次のエラーをスローしました。

'$record_clause'/2: No permission to modify static_procedure `(;)/2'

ありがとう azhrei、あなたは言いました: "あなたが言おうとしているのは、Y1 は賢いので、X1 は獲物 Y1 を見ている捕食者であるにもかかわらず、X1 は Y1 を捕まえることができないということだと思います.", はい、そうです!!

プロローグにはいくつかの強い制約があることがわかりました [1]:

  1. Prolog では、"or" (論理和) の事実や結論を使用できません。
  2. Prolog では、「否定的」(否定的) な事実や結論は認められません。
  3. Prolog では、ほとんどの事実や結論が存在量化されることは許可されていません。
  4. Prolog では、2 次ロジックを直接使用することはできません。

だから私は次のようにコードを変更しました:

%rules
predator(X) :- prey(Y), watch(X,Y).
catch(X,Y) :- predator(X),prey(Y),not(intelligent(Y)),watch(X,Y).
hungry(X) :- predator(X),prey(Y),watch(X,Y),not(catch(X,Y)).

%facts
prey(pelusa).
intelligent(shaki).
intelligent(pelusa).
watch(shaki,pelusa).

私も使ってみました:

 false :- predator(X),prey(Y),intelligent(Y),watch(X,Y),catch(X,Y).

それはコンパイルされますが、prolog が catch(X,Y) が true かどうかを調べる必要がある場合、述語がルールの後件にないため、できません。

--

[1]。ニール C. ロウ、URL: http://faculty.nps.edu/ncrowe/book/chap14.html

注:この例は、コスタリカの UCR の Yadira Solano 教授コースから取得したものです。

4

1 に答える 1

5

エラー メッセージは、セミコロンの使用に関するもの;です。再定義することはできません。

false述語も変更できません。したがって、これがコンパイルされるとあなたが言うことに驚いています:

false :- predator(X),prey(Y),intelligent(Y),watch(X,Y),catch(X,Y).

それは私のためにコンパイルされません。:-) (SWI-プロローグ)

2 番目のルールで、あなたが言おうとしているのは次のようなことだと思います 。Y1 は知的なので、X1 は獲物 Y1 を見ている捕食者ですが、X1 は Y1 を捕まえることができません。その場合、次のものが必要になります。

catch(X,Y) :- ...,...,...,...,not(intelligent(Y)).

(あなたが自分自身を見つけ、投稿で編集したように。:-)

注:あなたが提供したリンクは、論理的に同等であるいくつかのステートメントを示していますが、Prologでは手続き的に同等ではないため、コードでそれらを使用できるという意味ではありません。falseand;はクエリ (プロローグ プロンプト) またはルール本体で使用できますが、ルール ヘッドでは使用できません。

于 2012-07-19T04:17:50.910 に答える