1
我想實現一個CSP與變量的領域是非數字(喜歡的事[莉薩·安瑪麗喬安娜])。有沒有辦法在Mozart/Oz中實現這一點?如何在Mozart/Oz中創建非數字約束?
我想實現一個CSP與變量的領域是非數字(喜歡的事[莉薩·安瑪麗喬安娜])。有沒有辦法在Mozart/Oz中實現這一點?如何在Mozart/Oz中創建非數字約束?
可能可以實現這樣的事情在C++語言擴展,但語言本身,這是不可能的。
唯一的內置類型的約束是有限域約束(非負整數),有限組約束(上組非負整數的域約束)和記錄的約束。
也許你可以使用整型常量來模擬你的問題,例如
declare
%% 4 constants
Lisa = 1
Ann = 2
Mary = 3
Joanna = 4
%% N will be the constrained variable
N
in
N::[Lisa Ann Mary Joanna]
{Show N} %% displays N{1#4}, i.e. N is between 1 and 4
N \=: Mary %% tell: N is not Mary
{Show N} %% displays N{1 2 4}, i.e. N is one of 1,2,4
如果您不想使用有限域,則有更一般的邏輯編程思想。您可以爲變量的不同可能值創建的選擇點,例如:
declare
proc {Script A}
A =
choice
lisa
[] ann
[] mary
[] joanna
end
end
{Show {SearchOne Script}} %% displays "[lisa]"
{Show {SearchAll Script}} %% displays "[lisa ann mary joanna]"
也可以做到這一點有沒有靜態已知數量的值,使用Combinators。
感謝您的回答。非常豐富和有益的。我想堅持約束規劃範式,以便利用傳播者以及能夠將一般約束與一階邏輯規則混合。我想我會使用字典爲了在我的csp中使用我的常量作爲整數值。 – mhourdakis 2011-03-04 09:51:37