La lógica de Prolog es la siguiente: devuelve el valor de retorno en la variable del extremo derecho. Si no se declara la tercera variable en este caso, devolverá True pues estará comparando las dos variables de entrada solamente. El signo de exclamación es para detener el backtracking, la coma es el AND lógico, y el punto y coma el OR lógico. Cada declaración de la función "mcd" equivale a un if.
mcd(1, 1, 1):-!. % Func
mcd(0, 0, 0):-!.
mcd(X, Y, Z):- X =:= Y, Z is X,!.
mcd(X, Y, Z):- X > Y, X1 is X-Y, mcd(X1, Y, Z1), Z is Z1.
mcd(X, Y, Z):- X < Y, X1 is Y-X, mcd(X1, X, Z1), Z is Z1.
Este código está basado en esta función, que calcula el factorial de un número:
fact(0, 1):-!.
fact(X, Y):- X > 0, X1 is X-1, fact(X1, Y1), Y is X*Y1.
Estoy usando SWI Prolog 7.2.