在 GNU prolog 中,有约束:
我有一个列表,对于 N = 5(例如),它是这样的:
[3*(1-_#0(0..1)),2*(1-_#18(0..1)),1*(1-_#36(0..1)),4*(1-_#54(0..1)),2*(1-_#72(0..1))]
我正在研究有限域约束环境,我尝试了这个 max_list(MaxFilter, M0),
我得到了这个错误(因为此时变量没有值)未捕获的异常:error(type_error(evaluable,_#4195373(0..1)),(=<)/2)
在 Eclipse 中,我会使用 eval,而在 SWI 中,我使用这个谓词
lmax([H|T], X):-
foldl(max_, T, H, Exp),
X #= Exp.
max_(E, X, max(E, X)).
但我在 GNU 中没有找到任何等效的 foldl 。
我应该怎么办?有任何想法吗?我被卡住了,我已经在整个互联网上搜索了几天......
我真正想要的是找到这个列表的最大值,当解决方案列表的标签发生时(在我的主要谓词的最后)。发生这种情况时,我试图找到最大值的列表变量将有一个值(它们是相同的变量,对于上面的示例,我有 Sol=[_#0(0..1), _# 18(0..1),...])。但是代码从未达到这一点,因为当我尝试找到最大值时它会引发错误。