% Za to nalogo v prologu predstavimo naravna števila z atomom »z« (število nič) % in predikatom n/1, ki definira relacijo »naslednik«: z. % nič n(X) :- X = z ; X = n(_). % če je X število, je število tudi njegov naslednik n(X) % Število 5 tako npr. predstavimo s strukturo n(n(n(n(n(z))))). % Definirajte predikat vsota/3, ki sešteje dve števili v tem zapisu. Primer uporabe: % % ?- vsota(n(n(z)), n(n(z)), S). % S = n(n(n(n(z)))). % ?- vsota(n(n(n(z))), z, S). % S = n(n(n(z))). vsota(z, X, X). vsota(n(X), A, n(S)) :- vsota(X, A, S). % Definirajte predikat produkt/3, ki zmnoži dve števili v tem zapisu. Primer uporabe: % % ?- produkt(n(n(z)), n(n(n(z))), P). % P = n(n(n(n(n(n(z)))))). produkt(z, _, z). produkt(n(A), B, P) :- vsota(P1, B, P), produkt(A, B, P1). % Definirajte predikat stevilo/2, ki pretvarja med običajnimi in našimi števili. Primer uporabe: % % ?- stevilo(2, Dva). % Dva = n(n(z)). % ?- stevilo(N, n(n(n(z)))). % N = 3. :- use_module(library(clpfd)). stevilo(0, z). stevilo(N, n(X)) :- N #= NX + 1, stevilo(NX, X). % Zapišite vprašanje prologu, ki z uporabo (samo) zgornjih predikatov poišče skupne delitelje števil 252 in 294. Pri iskanju odgovorov se poizvedba lahko zacikla, vendar naj pred tem vrne vse rešitve. % ?- stevilo(252, A), stevilo(294, B), produkt(D, _, A), produkt(D, _, B), stevilo(N, D).