Otro sencillo codekata o howto en Prolog para hacer una utilidad interesante, un contador. En Prolog no tenemos variables como tal que puedan almacenar valores en el tiempo, sólo almacenan valores en el momento en que estamos en una regla. Así que tenemos que usar predicados para enlazar valores, y simular así el comportamiento normal de una variable, tal y como se haría en otros lenguajes más conocidos como los iterativos normales.
Simplemente se declara un predicado de un parámetro, llamado contador() que se dedicará a guardar el valor actual. Entonces para sumarle unidades al contador hay que sacar su valor, sumarle uno, y luego volver a guardarlo. Todo queda tal que así:
% Cómo hacer un contador en Prolog..
:- dynamic contador/1.
contador(0).
suma :-
contador(X),
Y is X + 1,
retractall(contador(_)),
assert(contador(Y)).
escribeValorContador :-
contador(X),
write('El contador ahora mismo vale: '),
write(X),
nl.
Se declara el predicado contador como dinámico para poder hacer retractall y assert.