Этот код является частью программы, которую я пишу для решения криптарифметической головоломки в прологе. Я решаю это с помощью CLPFD (SICStus Prolog). Я получаю сообщение об ошибке при использовании встроенного оператора целочисленного деления "//" (подробности см. Ниже). Я не смог решить эту проблему, поэтому я написал свою собственную функцию целочисленного деления.
То, что я хочу знать, это то, почему "//" не удается . Нет такой проблемы с другими арифметическими операторами, такими как +, -, /
ДО:
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) throw (ошибка (domain_error (clpfd_expression, (0 + _G3994 {0..9} + _ G3991 {0..9}) // 10), _G3976))?
ПОСЛЕ:
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).
Это прекрасно работает. Все, что я сделал, это заменил "//" моей собственной версией целочисленного деления