2013-06-23 50 views
3

從我處理Sicstus prolog中的標籤問題起,這是相當長的時間。我想創建一個長度爲7的數組,其中每個項目又是一個由4個整數組成的數組。我試過下面的代碼,但它不起作用,並給出一個實例化錯誤。Sicstus prolog:在列表中標記一個列表

:- 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

從http://sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/Membership- Constraints.html#Membership-Constraints domain/3用於變量列表。對於單變量,應使用「in」。不要忘記設置一個域以及。 – hakank

+0

謝謝hakank。我做了一些改變。 Sicstus prolog正在說用戶的參數2中輸入錯誤:標籤/ 2 !預計一個整數,但找到[_128,_130,_132,_134] !目標:標記(user:[],[[_ _ 128,_130,_132,_134],[_ 13 –

+0

由於原因,將tite從「數組」更名爲「列表」。 –

回答

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) 

通過

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