2010-12-05 5 views

답변

2

말할 수 있습니다.

당신이 YZ, 당신은 같은 것을 할 수있다 (이하 5 이상의 예를 들어 양의 정수) 일부 제한된 세트에서 것을 알고있는 경우 만 :

valid_number(1). 
valid_number(2). 
valid_number(3). 
valid_number(4). 

test(X, Y, Z) :- valid_number(Y), valid_number(Z), X is Y + Z. 
+1

이러한 설정 제약 조건은'between/3'을 사용하여 얻을 수도 있습니다. –

+0

예. 나는 이것을 (I, J, J) 사이에 발견했다 : - J> = I. (I, J, K) 사이 : : - J> I, J1은 (I, J1, K) 사이의 J - 1입니다. ? - 사이에 (1, 4, X). X = 4; X = 3; X = 2; X = 1; 거짓. 매우 도움이되었습니다. – Martynas

3

당신은 인자로 전달해야합니다. 프롤로그 산술 (is/2)은 마술 지팡이가 아닙니다. 오른쪽 인수는 평가되기 전에 완전히 인스턴스화되어야합니다 (변수 없음).

여러 가지 기본 용어와 변수의 조합으로 여러 가지 "방향"에서 술어를 사용하려면 Constraint Logic Programming을 사용하는 것이 좋지만 논리 프로그래밍의 다소 고급 영역입니다. 당신은 당신이 원하는 무엇이든 할 Y를 선택할 수 있습니다 그들을 Z 또는 그 반대를 계산하기 때문에 유한 한 도메인의 CLP에서는, 그것은 불가능

:- use_module(library(clpfd)). % this differs between implementations 
test(X,Y,Z) :- X #= Y + Z. 
+1

내가 두 번째 larsmans '제약 제안을 찾아 그 훨씬 쉽게 낮은 수준의 moded 산술보다 초보자를 이해합니다. 내 의견으로는,/2는 초급 과정을 이해하기가 너무 어렵 기 때문에 입문 과정에서 생략해야합니다. – mat

관련 문제