0
私はPrologの初心者です。なぜこのコードが期待通りに動作しないのか理解できません。述語への静的リストの受け渡し
?- p(X).
X = [1, 2, 3].
?- isFirstElement(1, p(X)).
false.
?- isFirstElement(1, [1, 2, 3]).
true.
isFirstElementへの最初の呼び出しがtrueを返さないと私は確信していない理由:
p([1, 2, 3]).
isFirstElement(X, [H|_]) :- X = H.
はここに私のコンソールです:
は、ここに私のデータベースです。 p(X)は評価されていませんか?どのように私はこれを正しく行うでしょうか?
: ' - P(X)、isFirstElement(1、X).' – CapelliC
は、明確にするプロローグでは、 'P(X)は'リストを返す関数ではありません。それは 'X'に依存して成功または失敗する述語であり、成功させる値で' X'をインスタンス化します。だから 'isFirstelement(1、p(X))'はあなたの考えを意味するものではなく、 'p(X)'はそのコンテキストで評価されません。この場合、isFirstElement/2に引数として渡される単なる項です。 CapelliCが指摘しているように、 '' X''を '' p(X) 'に成功したクエリでインスタンス化し、次に' 'isFirstElement(1、X)'を呼び出す必要があります。 – lurker
@CapelliCそれは返す: 'X = [1、2、3] .'は不可解な意味で正しいのですか? – TomaszS