와 프롤로그에서 일시 중단 된 목표를 실행하고 나는 붙어하는 방법 : D 내 문제의 요구 사항의 일반적인 버전은 같은 것입니다 :나는 프롤로그 제약 솔버를 사용하여 특정 문제를 해결하기 위해 노력하고 제약
:- lib(ic).:- lib(ic).
solve([A1*X+B1*Y=C1, A2*X+B2*Y=C2]):-
X::[0..999],
Y::[0..999],
X #\= 0,
Y #\= 0,
A1*X+B1*Y#=C1, % line1
A2*X+B2*Y#=C2. % line2
(Y = 1 용액이 경우 X = 1)
solve([2*X+3*Y=5, 3*X+2*Y=5]).
그리고 X와 Y의 값을 계산한다 프로그램 :
는 그리고 이것은 질의/I가 사용하는 목표이다. 목표/쿼리의 인수 수가 달라질 수 있습니다.이 경우 내 프롤로그 프로그램은 % line1 및 % line2로 주석 처리 된 행 대신 동적 중단 목표를 가져야합니다.
질문 : 어떻게 표현을 지연시킬 수 있습니까? 나는이 문제를 어렵게 코드화하고 두 개의 표현식 만 목표를 넘어서고 싶지는 않다고 생각한다.
희망은 분명하다. 감사합니다. .
감사합니다. 나는이 코드 부분을 이해하지 못했다 : Eq0 = (Lhs # = Rhs) 어떻게 작동합니까? 이러한 코딩에 대해 더 많은 것을 읽을 수 있도록 온라인에서 사용 가능한 적합한 자료를 안내해주십시오. 고맙습니다. – kallakafar
@kallakafar : 변수가 값 0을 가질 수 없다는 것을 안다면'Vars :: [1..999]'에 따라 도메인을 설정하고'foreach' 루프를 삭제할 수 있습니다. 'Eq0 = (Lhs # = Rhs)'라인은 변수'Eq0'가 목표'(Lhs # = Rhs)'에 묶여 있지만 목표는 실행되지 않는다는 것을 의미합니다. 다음 행'call (Eq0)'에서만 실행됩니다. 'Lhs # = Rhs'를 쓰는 것의 문제는 IC 라이브러리에서 변수 만 허용되며 복잡한 용어는 허용되지 않는다는 것입니다. 귀하의 경우,'Lhs'는 용어이므로'eval/1'에'eval (Lhs) # = Rhs'로 묶어야합니다. – twinterer
@kallakafar : ECLiPSe에 대한 설명서는 http://www.eclipseclp.org/doc/userman/umsroot.html 및 여기 http://www.eclipseclp.org/doc/libman/libman에서 온라인으로 볼 수 있습니다. html. ECLiPSe 설치와 함께 두 설명서를 모두 받아야합니다. Helmut Simonis의 e- 러닝 강좌가 있습니다 : http://4c.ucc.ie/~hsimonis/ELearning/index.htm 및 ECLiPSe 자습서 소개 : http://www.eclipseclp.org/doc/tutorial/index. html. 마지막으로 사용자 메일 링리스트에서 ECLiPSe에 대해 질문하십시오. https://lists.sourceforge.net/lists/listinfo/eclipse-clp-users – twinterer