如果我有以下数据库:
digit(0).
digit(1).
digit(2).
digit(3).
digit(4).
digit(5).
digit(6).
digit(7).
digit(8).
digit(9).
我想要查询
digits([X,Y]).
通过将X和Y实例化为10 * 10 = 100个不同的数字组合来成功,我将如何解决这个问题?
我是否需要对此使用有限域约束,例如
L ins 0..9
提前谢谢
答案 0 :(得分:2)
你不需要clpfd来做到这一点。您可以使用更高的顺序来获得富有表现力的解决方案:
digits(L) :- maplist(digit, L).
您也可以自己进行递归:
digits([]) :- [].
digits([H|T]) :- digit(H), digits(T).
答案 1 :(得分:2)
使用clpfd很简单:
?- use_module(library(clpfd)). true. ?- length(Zs, 3), Zs ins 1..2, labeling([], Zs). Zs = [1,1,1] ; Zs = [1,1,2] ; Zs = [1,2,1] ; Zs = [1,2,2] ; Zs = [2,1,1] ; Zs = [2,1,2] ; Zs = [2,2,1] ; Zs = [2,2,2].