2013-06-05 5 views
1

변수가 V이고 V의 값이 0..5 범위의 숫자 일 수 있습니다. 그러나 일부 값은 다른 값보다 더 선호되므로 V의 도메인을 순서 지정 순서로 지정하는 데 도움이됩니다.변수 도메인에서 값의 사용자 지정 순서를 지정하는 방법은 무엇입니까?

SICStus Prolog에서 수행 할 수 있습니까?

예 :

% PSEUDOCODE 
% 
% 3 is more preferred than 4; 4 is more preferred than 2; and so on.. 
% So I would write something like this: 

V in {3,4,2,5,1,0}, 
getDomainAsList(V, List), % the predicate do not exist 
% and the List would be: [3,4,2,5,1,0] and not [1,2,3,4,5] 

내가 설명서를 읽고 난 도움이 될 아무것도 찾지 못했습니다. 맞춤 라벨링 (즉, V의 도메인을 목록으로 변환하고이를 정렬하고 V에 값을 할당하여 문제를 해결할 수는 있지만 성능이 저하 될 것으로 예상됩니다.)

+0

당신은 태그 "clpfd"를 놓칠 수 있습니다

는 라벨/2, here에 값 (열거 형) 옵션을 참조하십시오. 그렇다면 변수를 선언하는 방법을 알려주십시오. –

+0

목록이 Prolog에서 작동하는 방법을 알고 있습니다. CLPFD 변수에 대한 자체 라벨이 있고 다음을 수행합니다. 1) 변수 X 가져 오기 2) 도메인 확인 3) X에 값 지정 X. 명백히 첫 번째 값을 지정하는 것이 훨씬 빠릅니다 (예제에서 3) V의 도메인을 가져 와서 정렬하는 것보다. –

답변

2

선호하는 순서로 모든 값의 배열 또는 목록을 가질 수 있습니다.

그런 다음 프로그램에서 배열 색인을 사용하고 마지막에는 색인에 해당하는 값을 반환합니다.

+0

이것은 하나의 변수에 적용됩니다. 하지만 어쨌든 그것은 흥미로운 아이디어입니다. –

+0

BTW, 왜, 무료, 오픈 소스 ECLiPSe http://eclipseclp.org/ 대신 무료가 아닌 SICStus Prolog를 사용하고 있습니까? –

+1

ECLiPSe는 작업 프로그래밍을 시작할 때 distinct2 제약 조건을 제공하지 않았습니다. 그러나 distinct2가 ECLiPSe 6.1에서 지원된다는 것을 알았고 쉽게 전환 할 수있었습니다. –

3

매뉴얼 페이지가 있습니다.