2016-05-15 8 views
0

私はPrologで簡単な2つの数値の乗算をしようとしています。Prolog乗算シンボル*がなぜ未定義のプロシージャですか?

X is 2 * 2. 

をそして私は答えとして4を得る:私は最初に任意のファイルをロードせずにプロローグを起動すると、私はで入力することができています。しかし、コードで自分のファイルを開いてPrologを起動すると、上記のステートメントはもう働きません。それは言う:

ERROR: toplevel: Undefined procedure: (*)/2 (DWIM could not correct goal) 

そして、ときに私は私のコードをロードし、私は、次を得る:

Warning: The predicates below are not defined. If these are defined 
Warning: at runtime using assert/1, use :- dynamic Name/Arity. 
Warning: 
Warning: */2, which is referenced by 
Warning:  c:/filepath/project.pl:98:21: 1-st  clause of multiply/3 

私は仕事の私のコードをロードではなく、していないときに私は自分のコードをロードする際に、乗算作業を行いなぜ?これは私が乗算に使用していたコードの一部です:上記

:-dynamic(multiply/3). 
multiply(X, Y, Z) :- Z is X * Y. 

の2行は唯一の私のコードで乗算の言及されています。 私は数時間をかけて答えを探し、失敗しました。たぶん私が検索に使用するキーワードは十分ではありませんが、Prologの回答をそのまま見つけるのは難しいでしょう。私は何か間違っているのですか?この問題は私がプロジェクトを仕上げるのを妨げる唯一の事であり、長すぎて投稿された場​​合にはうまく利用できません。

+0

**上記のエラー位置の上にいくつかの非公開のコメント**がありますか? – CapelliC

+1

私はそれを理解しました。それは本当に何かばかだった。教授は私たちにコードを与えました。私たちの仕事は、それが何か他のことをするように修正することでした。私は彼が ':-op(150、xfx、is)'を実行することによって 'is'を再定義したと信じています。それは意味を失いました(私が正しく理解すればそれを仮定しています)。そして彼がそれを再定義したとき、それはどこにも使われていなかった。私はその行を削除し、すべてが機能しました。 – Kumar

答えて

2

私たちのプロジェクトの一部は、教授が指定したコードを変更することでした。削除する場合

:-op(150,xfx,is). 

、中「です」:教授はどこにも使用されていませんでした次の行に含ま

X is 2 * 2. 

作品を、正しい答えを表示します。

+1

これを並べ替えたことは素晴らしいです。これが解決済みとマークされるようにあなたの答えを受け入れてください。 – mat