Prolog'da yeniyim ve yerleşik yüklemleri kullanmadan doğal sayılar üzerinde bazı temel aritmetik işlemleri gerçekleştirmem gerekiyor.Prolog - bazı temel aritmetik işlemleri uygulaması
Unary notaion'da doğal sayı terimini temsil ediyorum, yani 0 sabitine ve tekrarlayan halefi halefi hale getirici s [i.e. 4 = s (s (s (s (0))))]. Yukarıdaki notasyona göre aritmetik işlemleri uygularım.
kurallar kümesidir:
% nat(N)/1 ---> N is a natural number
nat(0).
nat(s(X)) :-
nat(X).
% add(X,Y,Z)/3 ---> Z = X + Y
add(X,0,X) :-
nat(X).
add(X,s(Y),s(Z)) :-
add(X,Y,Z).
% mult(X,Y,Z)/3 ---> Z = X * Y
mult(0,X,0) :-
nat(X).
mult(s(X),Y,Z) :-
mult(X,Y,XY),
add(XY,Y,Z).
şimdi, ben sorguladığınızda:
?- mult(s(s(0)), s(s(s(0))), RES).
tamam her şeyi elde:
RES = s (s (lar (lar (ler (s (0)))))).
Ben sorguladığınızda:
?- mult(X, s(s(s(0))), s(s(s(s(s(s(0))))))).
Ben sonsuz döngüye girdi ve S.Ö. olsun (? 6/3 = sormak)
mult(s(X),Y,Z) :-
add(XY,Y,Z),
mult(X,Y,XY).
ben linux makinede kesicileri-prolog çalıştırın:
ben yardımcı olmuyor mult yüklemi özyinelemeli çağrı sırasını değiştirmek bile.
Tavsiyenizi takdir edeceksiniz! Sonra mult
% add(X,Y,Z)/3 ---> Z = X + Y
add(0,X,X) :-
nat(X).
add(s(X),Y,s(Z)) :-
add(X,Y,Z).
ve:
mult(s(X),Y,Z) :-
add(XY,Y,Z),
mult(X,Y,XY).
istenilen sonucu verecektir