/* Code of Figure 1.6, page 19 from Kenneth C. Louden, Programming Languages Principles and Practice 2nd Edition Copyright (C) Brooks-Cole/ITP, 2003 */ gcd(U, V, U) :- V = 0 . gcd(U, V, X) :- not(V = 0), Y is U mod V, gcd(V, Y, X).