1

次のようなアサートを行うと:

assert(-color(red)).

それは私にエラーを与えます:

ERROR: assert/1: No permission to modify static procedure `(-)/1'

だから私は -color を動的に変更します:

dynamic -color/4.

そして今、それは私にエラーを与えます:

ERROR: dynamic/1: Type error: `atom' expected, found `-color'

何か案は?

4

1 に答える 1

5

まず、Prolog 自体が伝えているように、次のように読み取ら-color(foo)-(color(foo))ます。(-)/1それが、 and notについて不平を言っている理由-colorです。アトムをハイフンで始めることはできません。

第二に、あなたはしたいasserta/1or assertz/1、ないassert/1.

第 3 に、アリティ 4 で動的述語を宣言するときは、アリティ 1 ではなく、アリティ 4 で使用する必要があります。つまり、ダイナミックは、読み取って使用するか、読み取っ:- dynamic color/4て使用asserta(color(Red,Green,Blue,Alpha))する必要が:- dynamic color/1ありますasserta(color(red))。との組み合わせは、あなたが意味するもの/4ではありません。/1

于 2013-04-29T17:02:23.753 に答える