K-1
과 같은 표현식을 prolog의 술어에 인수로 전달하면 prolog가 다른 언어와 마찬가지로 표현식을 평가하지 않습니다. 귀하의 술어에 표시된대로 이라는 단어가 K
인 것으로 전달됩니다.
자, 가정하자 당신은 조회 :
element_at(X,[_|T],K) :- element_at(X,T,K-1).
그리고 재귀 쿼리 :
이
element_at(X, [1,2], 2).
그런 다음 쿼리가 술어의 두 번째 절 일치합니다
element_at(X, [2], 2-1).
을이 것 두 번째 절을 다시 일치시키고 쿼리 :
element_at(X, [], 2-1-1).
귀하의 조항과 일치하지 않으므로 실패합니다. 당신이 지연된 평가를 할 수
K1 is K-1,
element_at(X, T, K1).
참고 : 인수로 식의 값을 전달하려는 경우가 K1
와 함께했던 것처럼
따라서, 당신은, 사전에 평가해야합니다. 예를 들어이 경우
foo(X, Y) :-
Y is X * 2.
| ?- X = 1, foo(X-3, Y).
X = 1
Y = -4
yes
| ?-
, foo
를 쿼리, 그것은 foo(1-3, Y)
으로 조회합니다. foo
이 실행되면 Y is X * 2
행을 실행하여 Y is (1-3)*2
이 산출되어 Y=-4
이됩니다.