2013-06-23 1 views
3

나는 Sicstus 프롤로그에서 라벨링의 문제를 다루고 있기 때문에 꽤 오랜 시간이 걸렸다. 나는 각 항목이 다시 4 정수의 배열 인 길이 7의 배열을 만들고 싶다. 다음 코드를 시도했지만 작동하지 않고 인스턴스화 오류가 발생합니다.Sicstus 프롤로그 :리스트에리스트를 붙이는 것

:- use_module(library(clpfd)). 

schedule(Ss) :-  
    length(Ss, 7), 
    Ss = [[A, B, C, D]|T], 
    solve_days(Ss), 
    labeling([], Ss). 

solve_days([]). 
solve_days([[A, B, C, D]|T]):- 
    A in 1..3, 
    B in 4..7, 
    C in 7..9, 
    D in 6..10, 
    solve_days(T).   

누구든지 내게 어떻게 해결할 수있는 조언을 줄 수 있습니까? 고마워요!

+0

로 대체 할 Constraints.html # Membership-Constraints domain/3은 변수 목록입니다. 단일 변수의 경우 "in"을 사용해야합니다. 도메인을 T로 설정하는 것을 잊지 마십시오. – hakank

+0

감사합니다. 나는 약간의 변화를 가했다. Sicstus 프롤로그가 사용자의 인수 2에 유형 오류가 있음 : 라벨/2 ! 정수가 필요하지만 [_128, _130, _132, _134]가 발견되었습니다. ! 목표 : 레이블 지정 (사용자 : [], [[128, 130], _132, _134], [_ 13 –

+0

"배열"에서 "목록"으로 이름이 변경되었습니다. –

답변

2

레이블 지정 인수는 일반 목록이어야합니다. 이 문제를 해결하는 한 가지 방법은 append/3을 사용하여 A..D와 T를 병합하는 것입니다. append([A,B,C,D],T,Vars).

1

이러한 종류의 성가심을 해결하기 위해 종종 나타나는 접근법은 레이블을 지정하기 전에 술어 term_variables/2을 사용하는 것입니다.

predcate term_variables/2은 Corr.2 이후의 ISO 핵심 조건 자이며 용어에서 변수 목록을 결정합니다.

본 경우 하나

labeling([], Ss) 

http://sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/Membership- 가입일

term_variables(Ss, Vars), labeling([], Vars)