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'方法应该永远需要为列表长度添加更复杂的约束。 –