首页 > 解决方案 > Prolog将生成解决方案转换为约束?

问题描述

我有下面给出的程序,可以像使用 clpfd 一样将其转换为约束吗?(使用 sum 和 #<==>)。

liars_gt(X,L) :- length(X,Y),binary_list(Y,L),occur(L,C),multl(L,X,C).
/*Returns L*/

binary_list(0,[]).
binary_list(N,[X|Xs]) :- N > 0,member(X,[0,1]),N1 is N-1,binary_list(N1,Xs).
/* All possible binary combinations - backtracking of length N*/

occur(L,Count) :- aggregate_all(count, member(1, L), Count). /* Counts numbers of 1's in the list*/

multl([],[],_).
multl([H1|Tail1],[H2|Tail2],C):- (((H1 = 1),(H2 > C));((H1 = 0),(H2 =< C))),multl(Tail1,Tail2,C).

讨论了这个想法-> https://puzzling.stackexchange.com/questions/109733/who-is-the-liar-number-of-liars/109734#109734

标签: prologlogicconstraintsclpfd

解决方案


推荐阅读