Paradigmas
-Dados
-Atomos
-Listas
(1 2 3 (4 5))
(Atom x) -True se x é um átomo ou false
(List x)-True se x é lista ou false
(Car x)-Retorna o 1º elemento de uma lista(Head)
(Cdr x)-Retorna a lista sem o 1º elemento(Tail).
Pegar o 3
(Car(Cdr(Cdr(Lista)))) ou (Caddr(Lista))
Pegar o 5
(Caddddr(Lista))
(Cons x y) - constrói a lista com 1º elemento x e resto y. - inclui em y , x como 1º elemento.
(+ x y)
(mapcar + 5(Lista)) = (6 7 8
Programação Lógica
-Predicado P(arg1,arg2...arg n)
Informação
-Casado(João,Maria)
-Pai(José,João)
-Mãe(José,Maria)
Pai(Alberto , João) Pai(x,y) ^ Pai (y,z) => Avô(x,z)
Fatorial para prolog
Fatorial((n-1),y) ^ Produto(n,y,x) => fatorial(n,x)
Prolog:
-declaração de fatos(informação)
-declaração de regras(Head-:Body(^(E)) de predicados)
Fatorial(0,1)
Fatorial(n,x) -: Soma(n1,1,n) Fatorial(n1,y) Produto(n,y,x) Aprenda(“Fatorial(n,x)”)
Query(regra sem cabeça ->pergunta)
Query-: Fatorial(3,x)imprima(“O fatorial de ”n” é “ x) -:Soma(n1,1,3) Fatorial(n1 , y) Produto(3,y,x) Aprenda(“Fatorial(3,x) Soma(n2,1,2) Fatorial(n2 , y2) Produto(2,y2,y) Aprenda(“Fatorial(2,x)
Soma(n3,1,1) Fatorial(n3 , y3) Produto(1,y3,y2) Aprenda(“Fatorial(1,x)
Lista em Prolog
-[x|y] = Lista (x é o 1º elem e y é o resto da lista)
-[ ] = Lista vazia
Append(x,[ ],x)
Append([x|y],z,[x|w] -: Append [y ,z , w]
(Dado 2 listas vc quer concatenar)
Sistema de Tipos
Em C -> %x pega o endereço ac[i] = &(inicio + i *sizeof(type ac)) &ac[i] = &i[ac]
#include
#include
int main(int argc, char argv[])
{
char ac[4]="bobo"; char *p = "bobo"; char *ap[4]; char **app[4]; char *** r; int i;