2017-11-30 5 views
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)は評価されていませんか?どのように私はこれを正しく行うでしょうか?

+2

: ' - P(X)、isFirstElement(1、X).' – CapelliC

+2

は、明確にするプロローグでは、 'P(X)は'リストを返す関数ではありません。それは 'X'に依存して成功または失敗する述語であり、成功させる値で' X'をインスタンス化します。だから 'isFirstelement(1、p(X))'はあなたの考えを意味するものではなく、 'p(X)'はそのコンテキストで評価されません。この場合、isFirstElement/2に引数として渡される単なる項です。 CapelliCが指摘しているように、 '' X''を '' p(X) 'に成功したクエリでインスタンス化し、次に' 'isFirstElement(1、X)'を呼び出す必要があります。 – lurker

+0

@CapelliCそれは返す: 'X = [1、2、3] .'は不可解な意味で正しいのですか? – TomaszS

答えて

0

isFirstElementの2番目のパラメータは、述語ではなくリストでなければなりません。 ?統一と

isFirstElement(1, X)

関連する問題