2013-05-09 4 views
3

나는 이런 식으로 변수의 도메인을 지정할 수 있습니다변수의 도메인을 clpfd에 이름의 열거 형으로 설정할 수 있습니까?

MyVar in 1..10 

또는

MyVar in {1,10,15} 

하지만이 같은 지정 싶습니다 변수를 가지고 :

Activity_1__room in {room_1, room_2} % i.e. as atoms not as integers 

이 가능 그걸 할거야? 물론, 이름을 정수로 인코딩하는 것이 가능하지만 실제로 필요합니까?

+0

왜 'room (room_1)'과 같은 말 대신에이 변수를 관리하기 위해 clpfd가 필요한 이유가 무엇입니까? room (room_2). ... 방 (활동), '프롤로그를 프로그래밍 할 때 보통 그렇듯이? 어쨌든'Activity_1_room '에 산술 연산을 할 수 없습니다. –

+0

글쎄, 나는'labeling'을 사용하고 싶습니다. 그리고 당신의 코드를 어떻게 사용하는 지 알지 못합니다. 아마도 그것은 분명하지만 clpfd에 대한 나의 지식은 매우 제한적입니다. 나는 prolog와 clpfd 라이브러리 사이의 경계가 무엇인지 이해하지 못한다 (즉, 어떻게 내부적으로 함께 작동하는지). –

+0

숫자가 아닌 값에 라벨링을 사용할 이유가 없다고 생각합니다. 위에서 한 것처럼 두 방의 사실을 확인한 다음'room (ActivityRoom) '을 사용하면 정상적인 역 추적 기능이 올바른 방을 찾을 때까지 차례대로 시도합니다. Prolog가 실제로 어떤 진전을 이루기 위해 어떻게해야하는지에 대한 많은 이해를 놓친 것 같습니다. –

답변

7

원자를 사용할 수 없습니다. CLPFD의 도메인 범위는 정수 이상입니다.

"MyVar은 목록 L의 값 중 하나를 취해야합니다."라고 말하고 싶습니다. 즉, 집합은 선험적으로 알 수 없습니다.

?- list_to_fdset(L, Set), 
    MyVar in_set Set.