Prolog中的整数除法运算符

时间:2009-12-02 08:39:03

标签: prolog sicstus-prolog clpfd

此代码是我正在编写的程序的一部分,用于解决prolog中的密码学难题。我正在使用CLPFD(SICStus Prolog)解决这个问题。我在使用内置整数除法运算符“//”时出错(请参阅下面的详细信息)。我无法解决这个问题所以我编写了自己的整数除法函数。

我想知道的是为什么“//”失败。其他算术运算符如+, - ,/

没有这样的问题

BEFORE:

solve1([],[],[H],H).
solve([H1],[H2],[H3,H4],C) :- H1 #\= 0, H2 #\= 0,
                              H3 #= (C+H1+H2)mod 10,
                              H4 #=(C+H1+H2)//10.

solve([H1|T1] , [H2|T2] , [H3|T3],C) :- H3 #= (C+H1+H2)mod 10,
                                        C1 #=(C+H1+H2)//10 ,
                                        solve(T1,T2,T3,C1).

这是我得到的错误

错误:域名错误:clpfd_expression' expected, found(0 + _G1592 + _G1586)// 10' 例外:(12)抛出(错误(domain_error(clpfd_expression,(0 + _G3994 {0..9} + _ G3991 {0..9})// 10),_ G3976))?

AFTER:

integer_div(N,M) :- M #= N/10 , integer(M).
integer_div(N,M) :- N1 #= N mod 10 , N2 #= N-N1 , M #= N2/10.


solve1([],[],[H],H).
solve([H1],[H2],[H3,H4],C) :- H1 #\= 0, H2 #\= 0,
                              H3 #= (C+H1+H2)mod 10,
                              integer_div((C+H1+H2),H4).

solve([H1|T1] , [H2|T2] , [H3|T3],C) :- H3 #= (C+H1+H2)mod 10,
                                        integer_div((C+H1+H2),C1) ,
                                        solve(T1,T2,T3,C1).

这很有效我所做的就是用我自己的整数除法

替换“//”

1 个答案:

答案 0 :(得分:2)

根据the documentation,CLP-FD使用/进行整数除法。