GNU プロローグでは、制約付き:
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), ...])。しかし、最大値を見つけようとするとエラーがスローされるため、コードがこのポイントに到達することはありません。