<< Liste in Prolog - (Prolog) Lezione 5
Il rompicapo di Merkle >>

Operatori Aritmetici - (Prolog) Lezione 6

February 27th, 2009

Prolog è un linguaggio per il calcolo simbolico dove la necesita di eseguire calcoli aritmetici è esigua. In questa lezione vedremo come gestire le operazione aritmetiche.
I principali operatori aritmetici di Prolog sono:

  • +, addizione
  • -, sottrazione
  • *, moltiplicazione
  • /, divisione
  • mod, resto della divisione

L’uso di tali operatori non è diretto. Infatti scrivendo

?- X = 1 + 2.

Prolog risponderà “X = 1 + 2″ e non “X = 3″ come qualcuno potrebe aspettarsi. Ciò avviene perchè la stringa “1 + 2″ in prolog coincide con un termine dove + è il funtore ed 1 e 2 i suoi argomenti. Per eseguire l’operazione aritmetica c’è bisogno di usare l’operatore speciale is come segue:


?- X is 1 + 2.

e la risposta sarà

X = 3.

E’ possibile anche la comparazione tra valori numerici come nella seguende conversazione:


?- 277 * 37 > 10000.
yes

Gli operatori per la comparazione sono

  • >, maggione di
  • <, minore di
  • >=, maggiore o uguale di
  • =<, minore o uguale di
  • =:=, uguale
  • =\=, diverso

Quindi abbiamo il predicato is che va usato nella forma

T is Expr (o is(T,Expr))

dove T può essere un atomo numerico o una variabile ed Expr deve essere un’espressione numerica.
E gli operatori di comparazione che vanno usati nella forma

Expr1 <operatore> Expr2

Dove Expr1 ed Expr2 sono espressioni numeriche. Sia is che gli operatori di comparazione forzano la valutazione numerica, quindi è importante in entrambi i casi che le espressioni siano completamente istanziate. Ad esempio una query del tipo ?- X is 5 - Y,Y is 4. non è legale.

Vediamo adesso come applicare quanto esposto scrivendo un programma per il calcolo del massimo comune divisore(MCD).
Dati due interi positivi, X ed Y, il loro MCD può essere trovato distinguendo tre casi:

1. Se X ed Y sono uguali, allora MCD è proprio X
2. Se X < Y allora MCD è il minimo cumun divisore di X ed Y - X
3. Se Y < X allora MCD è il minimo cumun divisore di Y ed X - Y

Le regole Prolog di tale programma Prolog sono:

mcd(X, X, X).


mcd(X, Y, D) :-
    X > Y,
    Y1 is Y - X,
    mcd(X, Y1, D).


mcd(X, Y, D) :-
    X > Y,
    mcd(Y, X, D).

Posted in Programmazione, Tutorial |
Tags: ,

Leave Comment