2
我試圖使用lists
和clpfd
庫生成一個隨機長度列表。我已經試過如下:生成限制之間的所有長度的列表
?- use_module(library(clpfd)).
?- use_module(library(lists)).
gen_mem_burst(X) :-
Len in 1..2,
length(X, Len).
我看到的Prolog首先發現只有一個列表元素,然後用兩個元素的解決方案,正如我預期的解決方案。之後,它會發出「超出全局堆棧」的信息。我追蹤到它,並且我注意到它一直試圖將Len
設置爲3,4,5,等等。我怎樣才能讓它停止?
我是序言新手,我甚至不確定這是否是有效的使用模型。在我使用的其他基於約束的語言(例如SystemVerilog)中,這很容易實現。
我想我選擇的標題很差。我的意圖是能夠產生所有可能性(即,長度爲1的列表和長度爲2的列表)。我從鏈接中使用了'fd_length(..)'方法。 –
@Tudor Hm,還不確定。你絕對想爲此使用約束變量嗎?請參閱我的答案的更新,以獲取無需執行的方法。如果你真的不需要在列表長度上放置正確的CLP(FD)約束,那麼'fd_length/2'就好,它是一種矯枉過正。 –
使用'between'對於我的需求來說更酷(因爲我只需要掃描),但應該記住'fd_length/2'方法應該永遠需要爲列表長度添加更復雜的約束。 –