Aula 11

livro texto (cap 11 e 9)

Haskell online outro - so compilado

1 Numeros em Prolog

A coisa mais importante é que expreões matematicas so sao calculadas em 2 contextos

Comparações

X*4/Y > Z**2

Do lado direito de um is

X is Y+2

Expressões podem não dar certo em tempo de execução pois algumas variáveis podem não ter valor

2 Listas

Heterogeneas, entre [ ]

[1, 2, [5,6], abobora, [] ]

Pattern matching:

[Cabeca|Resto] 
[]

[X|R] nao casa com a lista vazia

[1,2,3] = [X|R]
X = 1, R = [2,3]

3 Exemplo

  • tamanho de uma lista
tam([],0).
tam([_|R],N) :- tam(R,NN), N is N+1.
tam(L,N) = tamx(L,N,0).
tamx([],N,Acc) :- Acc=N.
tamx([X|R],N,Acc) :- AA is Acc+1,tamx(R,N,AA).

3.1 Modo

quando vc programa tam vc assume que vc recebe a lista (+) e vai devolver o tamanho dela (-)

tam modo (+-)

3.2 Erros

tam([],0).
tam([_|R],N) :- tam(R,N), N is N+1.

tam([_|R],N) :- tam(R,NN), N = NN+1.

tamx([X|R],N,Acc) :- tamx(R,N,Acc+1).

tamx([X|R],N,Acc) :-tamx(R,N,AA),  AA is Acc+1,

4 Exercicios

Da aula 1 e 2 - use acumuladores quando necessario.

  • tamanho de uma lista
  • soma dos elementos de uma lista soma(+LISTA,-SOMA)
  • soma dos números pares de uma lista somap(+LISTA,-SOMA)
  • soma dos elementos nas posições pares da lista ( o primeiro elemento esta na posicao 1) somapares(+LISTA,-SOMA)
  • existe item na lista elem(+IT,+LISTA)
  • posição do item na lista: 1 se é o primeiro, falha se nao esta na lista pos(+IT,+LISTA,-POS)
  • conta quantas vezes o item aparece na lista (0 se nenhuma) conta(+IT,+LISTA,-CONTA)
  • maior elemento de uma lista - maior(+LISTA,-MAX)
  • reverte uma lista -
  • intercala 2 listas (intercala1 e intercala2)
intercala1([1,2,3], [4,5,6,7,8], X).
 X =  [1,4,2,5,3,6]
intercala2([1,2,3], [4,5,6,7,8], Y),
 Y =   [1,4,2,5,3,6,7,8]
  • a lista ja esta ordenada?
  • dado n gera a lista de 1 a n
  • retorna o ultimo elemento de uma lista
  • retorna a lista sem o utlimo elemento
  • shift right
shiftr([1,2,3,4],X)
 X = [4,1,2,3]
  • shiftr n lista (shift right n vezes)
  • shift left
  • shift left n vezes
  • remove item da lista (1 vez so)
  • remove item da lista (todas as vezes)
  • remove item da lista n (as primeiras n vezes)
  • remove item da lista (a ultima vez que ele aparece) **
  • troca velho por novo na lista (1 so vez)
  • troca velho por novo na lista (todas vezes)
  • troca velho por novo na lista n (as primeiras n vezes)

Author: Jacques Wainer

Created: 2018-09-18 Tue 15:15

Validate