Aula 6

1 Arrays como listas de listas

A matriz

1 2 3 4
5 6 7 8
9 10 11 12

pode ser representado como uma lista de linhas

((1 2 3 4) (5 6 7 8) (9 10 11 12))

  • dado uma matriz quadrada retorna a diagonal principal
  • dado uma matriz retorne a transposta dela
  • dado duas matrizes de tamanhos apropriados retorne o produto delas

2 funções como argumentos de funçoes

  • (mapcar fn lista) -> aplica a funçao fn em todos argumentos da lista
(defun soma1 (x) (+ 1 x))

(mapcar #'soma1 '(9 8 10 30)) -> (10 8 11 31)
  • (mapcar fn lista1 lista2) aplica a função fn nos elementos correspondentes das listas

(mapcar #'- '(9 8 10 30) '(2 5 10 50)) -> (7 3 0 -20)
  • funçoes anonimas
(mapcar #'(lambda (x) (+ 1 x)) '(9 8 10 30))
  • (apply fn lista) chama a funçao fn com os elementos de lista como argumentos
(apply #'+ '(9 8 10 30)) -> 57
  • (funcall fn arg1 arg2 .. argn) chama a funçao com argumentos arg1, arg2 ..argn)
(funcall #'+ 9 8 10 30) -> 57
  • ache o menor de uma lista dada a funçao menor que é T se o primeiro argumento é menor que o segundo
(defun minz (l menor)
   (minzaux l menor (first l)))

(defun minzaux (l menor acc)
  (if (null l) acc
      (if (funcall menor (first l) acc) 
          (minzaux (rest l) menor (first l))
          (minzaux (rest l) menor acc)
          )))

(minz '(2 4 5 7 9 13) #'(lambda (a b)
                          (if (or (and (oddp a) (oddp b)) (and (evenp a) (evenp b))) (< a b)
                            (if (oddp a) T nil))))
                   
(defun ordenado? (l menor)
  (if (or (null l) (null (rest l))) T
      (let ((a (first l)) 
            (b (first (rest l))))
        (if (funcall menor a b) (ordenado? (rest l) menor)
            nil))))

(ordenado? '(5 11 4 8 10) #'(lambda (a b)
                               (if (or (and (oddp a) (oddp b)) (and (evenp a) (evenp b))) (< a b)
                                   (if (oddp a) T nil))))

  • refaça os exercicios de matrizes usando o o mapcar, (mutiplicacao de 2 vetores é uma combinaçao de mapcar com apply!!)
  • existe uma solucao para a transposta usando mapcar e apply que é espantosa.

Author: Jacques Wainer

Created: 2018-03-14 Wed 09:46

Validate