4. Operadores e Aritmética Operadores • • • Na matemática costuma-se escrever expressões como 2*a + b*c onde + e * são operadores e 2, a, b e c são argumentos. + Em particular, + e * são denominados operadores infixos porque se localizam entre os dois argumentos que operam. Tais expressões são representadas por árvores e podem ser escritas, se for desejado, sob a forma de termos Prolog, com os símbolos + e * como functores: +(*(2, a), *(b, c)) Introdução à Programação Prolog * 2 * a b c Em geral, entretanto, prefere-se usar a notação infixa, mais natural e que também é aceita pelo Prolog. 2 Definição de Operadores • Em Prolog a definição de novos operadores é realizada pela inserção no programa de um certo tipo especial de cláusulas, denominadas diretivas :-op, • Uma diretiva :-op deve aparecer no programa antes de qualquer expressão que contenha esse operador. Por exemplo, o operador tem pode ser definido pela diretiva: :-op(600, xfx, tem). • Isso informa ao sistema que se deseja usar tem como um operador de prioridade 600 e cujo tipo é xfx, que designa uma classe de operadores infixos. (Ex: joão tem informações.) • A forma de especificação, xfx, sugere que o operador, denotado por f, deva ser colocado entre dois argumentos, denotados por x. Introdução à Programação Prolog 3 Tipos de Operadores OPERADORES TIPO infixos xfx xfy yfx prefixos fx fy - posfixos xf yf - Introdução à Programação Prolog 4 Operadores Pré-definidos A linguagem Prolog já vem com diversos operadores prédefinidos. Um conjunto padrão pode ser visto abaixo: :-op(1200, xfx, ':-'). :-op(1200, fx, [':-', '?-']). :-op(1100, xfy, ';'). :-op(1000, xfy, ','). :-op( 700, xfx, [is, =, \=, <, >, =<, >=, ==, =\=, \==, =:=]). :-op( 500, yfx, [+, -]). :-op( 500, fx, [+, -, not]). :-op( 400, yfx, [*,/,div]). :-op( 300, xfx, mod). :-op( 200, xfy, ^). Introdução à Programação Prolog 5 Operadores Aritméticos Em especial os operadores aritméticos mais comuns podem ser conferidos na tabela abaixo: OPERADOR PRIORIDADE TIPO SIGNIFICADO + * / div mod 500 500 400 400 400 300 yfx yfx yfx yfx yfx xfx adição subtração multiplicação divisão divisão inteira resto da divisão inteira ^ 200 xfy potenciação Introdução à Programação Prolog 6 Operadores is e = A diferença entre estes dois operadores deve ficar clara a partir dos exemplos a seguir: ?- X = 1+2. X = 1+2 yes ?- X is 1+2. X=3 yes ?- t(X,2) = t(5,Y). X = 5, Y = 2 yes Introdução à Programação Prolog ?- X is 3^2*2. X = 18 yes ?- X is 3^2^2. X = 81 yes ?- X is 2^2^2, Y is X^3. X = 16, Y = 4096 yes ?- ...e assim por diante. 7 Operadores de Comparação OPERADOR PRIORIDADE TIPO SIGNIFICADO > 700 xfx maior que < 700 xfx menor que >= 700 xfx maior ou igual a =< 700 xfx menor ou igual a =:= 700 xfx valores iguais =\= 700 xfx valores diferentes Introdução à Programação Prolog 8 Funções Pré-definidas Introdução à Programação Prolog FUNÇÃO SIGNIFICADO abs(X) Valor absoluto de X acos(X) Arco-cosseno de X asin(X) Arco-seno de X atan(X) Arco-tangente de X cos(X) Cosseno de X exp(X) Valor de "e" elevado a X ln(X) Logaritmo natural de X log(X) Logaritmo decimal de X sin(X) Seno de X sqrt(X) Raiz quadrada de X tan(X) Tangente de X round(X,N) Arredonda X para N casas decimais pi Valor de pi com 15 casas decimais random Um número aleatório entre 0 e 1 9 Fatorial fatorial(0, 1). fatorial(X, Y):X1 is X-1, fatorial(X1, Y1), Y is X*Y1. Introdução à Programação Prolog 10 Máximo Divisor Comum mdc(X, X, X). mdc(X, Y, D) :X < Y, Y1 is Y-X, mdc(X, Y1, D). mdc(X, Y, D) :X > Y, mdc(Y, X, D). Introdução à Programação Prolog 11