Prolog에 정수의 digit sum을 계산하는 규칙을 어떻게 정의 할 수 있습니까?프롤로그에서 숫자 합
예 :
digitsum[Integer, Result] :- ...
되도록 X = 6
(= 1 + 2 + 3)에 질의 결과 digitsum(123, X).
. SWI-Prolog에서 실행되는 솔루션은 높이 평가됩니다.
Prolog에 정수의 digit sum을 계산하는 규칙을 어떻게 정의 할 수 있습니까?프롤로그에서 숫자 합
예 :
digitsum[Integer, Result] :- ...
되도록 X = 6
(= 1 + 2 + 3)에 질의 결과 digitsum(123, X).
. SWI-Prolog에서 실행되는 솔루션은 높이 평가됩니다.
이 문제는 자연스럽게 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 등등에 대해 이야기합니다.
@mat :'div'는 SWI에 없습니다. 응답은'/'하지만'//'또는'div'를 포함해서는 안됩니다 - 따라서. – false
Thx, 답을 정확히 사용하면 예제 쿼리에서 오류가 발생합니다 :'ERROR : Domain error :'clpfd_expression '예상,'123 // 10''. 내가 뭘 잘못 했니? – user2030503
@ user2030503 : 매우 오래된 버전의 clpfd가 있습니다. 당신은 대신에'/'를 쓸 수 있습니다. * à la rigueur * – false
아무 것도 시도하지 않았습니까? 또한, 1digitsum [Integer, Result]'는 Prolog에서 부적절한 구문입니다. – lurker