Il rompicapo di Merkle >>
Operatori Aritmetici - (Prolog) Lezione 6
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: aritmetica, prolog
RSS
ATOM
Leave Comment