Voici un extrait de cryptarithmetic dans Prologque signifie C1 dans le puzzle cryptarithmétique de polog?
sum1([D1|N1], [D2|N2], [D|N], C1, C, Digs1, Digs) :-
sum1(N1, N2, N, C1, C2, Digs1, Digs2),
digitsum(D1, D2, C2, D, C, Digs2, Digs).
Comme ci-dessous explique
sum1(N1, N2, N, C1, C, Digits1, Digits)
where N1, N2 and N are our three numbers,
C1 is carry from the right, and
C is carry to the left (after the summation).
Digits1 is the list of available digits for instantiating the
variables in N1, N2, and N.
Digits is the list of digits that were not used in the
instantiation of these variables.
Je ne comprends vraiment pas qu'est-ce que C1 signifie en sum1([D1|N1], [D2|N2], [D|N], C1, C, Digs1, Digs)
, C2 représente sous forme de transport à droite, C signifie porter à gauche, alors que signifie C1?
nice! pourquoi ne pas le simplifier comme 'sum1 ([D1 | N1], [D2 | N2], [D | N], C, Digs1, Digs): - somme1 (N1, N2, N, C2, Digs1, Digs2), digitsum (D1, D2, C2, D, C, Digs2, Digs). »Pour C1 ne modifie jamais dans l'appel récursif et toujours être zéro? – stonestrong
oh! cela peut vraiment être simplifié et les tests réussissent, mais nous devrions aussi changer de cas de base. dans le livre de Bratko, somme (N1, N2, N): -sum1 (N1, N2, N, 0, 0, [0,1,2,3,4,5,6,7,8,9] , _). ', et le cas de base est' sum1 ([], [], [], C, C, chiffres, chiffres). Maintenant je les change en somme (N1, N2, N): -sum1 (N1, N2, N, 0, [0,1,2,3,4,5,6,7,8,9], _) .', base de cas 'sum1 ([], [], [], 0, Chiffres, Chiffres) .' – stonestrong
Vous avez raison. Je pense qu'il pourrait être contraint * après * toutes les étapes récursives, mais semble être inutile au but. – CapelliC