기호 제약
기호 제약
FD 기호 제약을 설명해요.
본문
fd_all_different/1
Templates
fd_all_different(+fd_variable_list)
Description
fd_all_different(List)은 List의 모든 변수가 서로 다른 값을 취하도록 제약해요. 이는 각 변수 쌍에 부등식 제약을 게시하는 것과 동일해요. 이 제약은 변수가 ground가 될 때 촉발되어, 그 값을 다른 변수들의 도메인에서 제거해요.
Errors
- List가 부분 리스트 —
instantiation_error - List가 부분 리스트도 리스트도 아님 —
type_error(list, List) - List 리스트의 어떤 요소 E가 변수도 정수도 FD 변수도 아님 —
type_error(fd_variable, E)
Portability: GNU Prolog 술어.
fd_element/3
Templates
fd_element(?fd_variable, +integer_list, ?fd_variable)
Description
fd_element(I, List, X)는 X를 List의 I번째(1부터) 정수와 같도록 제약해요.
Errors
- I가 변수도 FD 변수도 정수도 아님 —
type_error(fd_variable, I) - X가 변수도 FD 변수도 정수도 아님 —
type_error(fd_variable, X) - List가 부분 리스트이거나 변수인 요소 E를 가진 리스트 —
instantiation_error - List가 부분 리스트도 리스트도 아님 —
type_error(list, List) - List 리스트의 어떤 요소 E가 변수도 정수도 아님 —
type_error(integer, E)
Portability: GNU Prolog 술어.
fd_element_var/3
Templates
fd_element_var(?fd_variable, +fd_variable_list, ?fd_variable)
Description
fd_element_var(I, List, X)는 X를 List의 I번째(1부터) 변수와 같도록 제약해요. 이 제약은 fd_element/3(9.8.2절)과 비슷하지만 List는 FD 변수도 포함할 수 있어요(정수만이 아니라).
Errors
- I가 변수도 FD 변수도 정수도 아님 —
type_error(fd_variable, I) - X가 변수도 FD 변수도 정수도 아님 —
type_error(fd_variable, X) - List가 부분 리스트 —
instantiation_error - List가 부분 리스트도 리스트도 아님 —
type_error(list, List) - List 리스트의 어떤 요소 E가 변수도 정수도 FD 변수도 아님 —
type_error(fd_variable, E)
Portability: GNU Prolog 술어.
fd_atmost/3, fd_atleast/3, fd_exactly/3
Templates
fd_atmost(+integer, +fd_variable_list, +integer)
fd_atleast(+integer, +fd_variable_list, +integer)
fd_exactly(+integer, +fd_variable_list, +integer)
Description
fd_atmost(N, List, V)— List의 변수 중 V와 같은 것이 기껏해야 N개라는 제약을 게시.fd_atleast(N, List, V)— List의 변수 중 V와 같은 것이 적어도 N개라는 제약을 게시.fd_exactly(N, List, V)— List의 변수 중 V와 같은 것이 정확히 N개라는 제약을 게시.
이 제약들은 fd_cardinality/2(9.7.4절)의 특수 경우지만 구현이 더 효율적이에요.
Errors
- N이 변수 —
instantiation_error - N이 변수도 정수도 아님 —
type_error(integer, N) - V가 변수 —
instantiation_error - V가 변수도 정수도 아님 —
type_error(integer, V) - List가 부분 리스트 —
instantiation_error - List가 부분 리스트도 리스트도 아님 —
type_error(list, List) - List 리스트의 어떤 요소 E가 변수도 FD 변수도 정수도 아님 —
type_error(fd_variable, E)
Portability: GNU Prolog 술어.
fd_relation/2, fd_relationc/2
Templates
fd_relation(+integer_list_list, ?fd_variable_list)
fd_relationc(+integer_list_list, ?fd_variable_list)
Description
fd_relation(Relation, Vars)는 변수들의 튜플 Vars를 리스트 Relation의 한 튜플과 같도록 제약해요. 튜플은 리스트로 표현돼요.
예: X AND Y ⇔ Z가 되도록 불리언 AND 관계를 정의:
and(X,Y,Z) :-
fd_relation([[0,0,0],[0,1,0],[1,0,0],[1,1,1]], [X,Y,Z]).
fd_relationc(Columns, Vars)는 fd_relation/2와 비슷하지만 관계가 튜플 리스트가 아니라 관계의 열(column) 리스트로 주어져요. 열은 리스트로 표현돼요.
예:
and(X,Y,Z) :-
fd_relationc([[0,0,1,1],[0,1,0,1],[0,0,0,1]], [X,Y,Z]).
Errors
- Relation이 부분 리스트이거나 변수인 하위 항 E를 가진 리스트 —
instantiation_error - Relation이 부분 리스트도 리스트도 아님 —
type_error(list, Relation) - Relation 리스트의 어떤 요소 E가 변수도 정수도 아님 —
type_error(integer, E) - Vars가 부분 리스트 —
instantiation_error - Vars가 부분 리스트도 리스트도 아님 —
type_error(list, Vars) - Vars 리스트의 어떤 요소 E가 변수도 정수도 FD 변수도 아님 —
type_error(fd_variable, E)
Portability: GNU Prolog 술어.