Prolog中的数字和

时间:2014-11-22 12:51:25

标签: numbers prolog clpfd

如何在Prolog中定义规则以计算整数的digit sum

示例:

digitsum[Integer, Result] :- ...

以便查询digitsum(123, X).生成X = 6(= 1 + 2 + 3)。我们赞赏在SWI-Prolog下运行的解决方案。

1 个答案:

答案 0 :(得分:2)

这个问题自然导致使用library(clpfd)

的实现
:- use_module(library(clpfd)).

digitsum(Z,S) :-
   Z #= 0,
   S #= 0.
digitsum(Z0, S0) :-
   Z0 #> 0, S0 #> 0,
   S0 #= Z0 mod 10 + S1,
   Z1 #= Z0 // 10,  % should be rather div
   digitsum(Z1, S1).

?- digitsum(D,S).
D = S, S = 0 ;
D = S,
S in 1..9 ;
D in 10..99,
D/10#=_G5601,
D mod 10#=_G5613,
_G5601 in 1..9,
_G5613+_G5601#=S,
_G5613 in 0..9,
S in 1..18 ...

第一个答案是零。第二个说数字1..9与其总和相同。 然后它谈论数字10..99等。