2014-04-19 4 views
2

나는 프롤로그에서 제약 조건을 해결하는 방법을 배우기위한 자료를 찾고있다. 예를 들어프롤로그에서 제약 조건 해결

List=[X, Y, Z], List ins 1..4, X - Y #= Z. 
+1

이것은 잘못된 Prolog 구문입니다. 'List [X, Y, Z]'는 [이전에 게시 된 문제] (http://stackoverflow.com/questions/23173168/constraint-programming-in-swi-prolog)에 언급 된 바와 같이 유효하지 않습니다. – lurker

+0

고맙습니다. 지금 고쳐주었습니다. – Tanay

답변

3

내가 알기에 구체적인 해결책을 얻고 자 할 때 (도메인이 아니라). 이를 위해 label/1 또는 labeling/2을 사용하십시오. 이렇게하면 역 추적을 통해 모든 명시적인 해결책을 얻을 수 있습니다. SWI-Prolog에서이 술어는 여기에 문서화되어 있습니다 : labeling/2.

label(List)labeling([],List)과 같습니다. 이 간단한 예를 들어

, label(List)는 충분?

이 - Y 번호 = Z, 라벨 (목록) - 목록 = [X가 Y, Z는, 목록 1..4, X를 INS.

일반적으로 clpfd의 전체 설명서 (여기 SWI-Prolog의 경우)를 읽으면 도움이됩니다.

+0

Prolog가 도메인을 작동시키는 방법을 파악하려고합니다. 더 많은 것을 읽기 위해 소스를 추천 해 주시겠습니까? – Tanay

+2

도메인 (전파 자 등)이 어떻게 작동하는지에 대한 일반적인 설명을 원한다면 Constraint (Logic) 프로그래밍에 대한 전체 서적이 아마 어느 정도 자세히 설명하는 것이 가장 좋습니다. 이 책에서 내가 좋아하는 책 : Rina Dechter : "Constraint Processing"(2003), Apt "제약 프로그래밍의 원리"(2003), Marriott & Stuckey "제약 조건 프로그래밍"(1998, 조금 오래되었지만 여전히 고무적). – hakank