2
문제를 해결하기 위해 GNU Prolog를 사용합니다. 나는 다음과 같은 조건을 정의했습니다 :findall/3은 솔루션 대신 빈 목록을 반환합니다.
% P is the product of X and Y
produit(X,Y,P) :-
between(2,200,X),
between(2,200,Y),
X #<# Y,
X*Y #=# P.
% S is the sum of X and Y
somme(X,Y,S) :-
between(2,200,X),
between(2,200,Y),
X #<# Y,
X+Y #=# S.
%je ne peux pas deviner
clue_one(X,Y) :-
produit(X,Y,P),
XX*YY #=# P,
XX #\=# X,
XX #\=# 1,
YY #\=# 1,
XX #\=# Y.
%je le savais
clue_two(S) :-
forall(somme(X,Y,S), clue_one(X,Y)).
프롤로그 clue_two(17)
에 해당하지만 findall(S, clue_two(S), L)
을하려고 할 때, GNU 프롤로그가 빈 목록을 반환 말한다. 왜?
'findall/3'은 해결책을 찾지 못합니다. 왜냐하면'clue_two (S)'는 해결책을 찾지 못합니다. 이것은 Paulo의 대답으로 설명됩니다. – lurker
좋아! 감사합니다 ... – Saroupille
하나의 프로그램에서 여기에 제약과 더 전통적인 프로그래밍 스타일을 혼합하고 있습니다. 이것이 당신이 원하는 것이라는 것을 확신하지 못합니다. – false