ここでは、gotまたはgiveは時間とともに入力されています。 私は最後のエントリであることを知るために次のコードを試しています:gotまたはgive?プロローグの最後のエントリを見つける
got(1).
gave(2).
got(3).
gave(4).
got(5).
gave(6).
got(7).
isLastGot():-
findall(G, Got(G), Lg),
findall(A, Gave(A), La),
Lgg is lastElement(Lg),
Laa is lastElement(La),
Lgg > Laa.
lastElement([H|T],A):-lastElement([T],A).
lastElement([A],A).
しかし、それは動作していない:
?- isLastGot().
ERROR: functor/3: Domain error: `compound_non_zero_arity' expected, found `isLastGot()'
?- isLastGot.
ERROR: toplevel: Undefined procedure: isLastGot/0 (DWIM could not correct goal)
?-
はどこに問題があるとどのようにそれを修正することができますか?
編集:私は、次を使用している場合は、私はロードにエラーが発生します。
isLastGot:-
findall(G, Got(G), Lg),
findall(A, Gave(A), La),
Lgg is lastElement(Lg),
Laa is lastElement(La),
Lgg > Laa.
エラー:... /gotgave.pl:11:14:構文エラー:演算子が 多くの警告もありますが予想されますof:/ gotの句は、ソースファイル に含まれていません(与えられた/ 1の場合も同様の警告)
ファイルがロードされていません。
でも、すべてのGOTを入れて警告とエラーがメインのランタイムエラーがまだ持続され、離れて行っているもののすべてが、一緒に与えた後:
1 ?- isLastGot.
ERROR: toplevel: Undefined procedure: isLastGot/0 (DWIM could not correct goal)
2 ?- isLastGot().
ERROR: functor/3: Domain error: `compound_non_zero_arity' expected, found `isLastGot()'
3 ?-
これは関係なく、私がisLastGot()を使用するかどうかを示します。 - またはisLastGot: - 宣言で。
'isLastGot()'はPrologで無効な構文です。 'isLastGot'を試してみてください。 *両方の*場所(宣言と呼び出し)。 – lurker
それをisLastGotに修正しても、 - isLastGotを試してみてください。エラー:トップレベル:未定義プロシージャ:isLastGot/0(DWIMが目標を修正できませんでした) – rnso
コードには多くの問題があります。 'Got(G)'と 'Gave(A)'の両方が大文字で表示されていることを示しています。これはエラーです。これらは 'got(G)'と 'give(A)'でなければなりません。私はこれを数回言いましたが、Prologの述語は関数*ではありません。彼らは機能のように振る舞いません。だから 'Lgg is lastElement(Lg)'は意味をなさない。 'lastElement(Lg、Lgg)'でなければなりません。不連続な述語についての警告も受け取ったでしょう( 'got'と' give'を交互に)。一部のプロローグでは、不連続なファクト/述部は無視されます。 – lurker