MC336 - Prova Lisp

Enunciado distribuído na sala.

Gabarito

Questão 1

cons
list
append
cons
list

Questão 2

(defun pula (lista)
  (if (null lista)
    nil
    (cons (car lista) (pula (cddr lista)))
  )
)

Questão 3

(defun caixas (expr)
  (if (consp expr)
    (+ 1 (caixas (car expr)) (caixas (cdr expr)))
    0
  )
)
Variação:
(defun caixas (expr)
  (if (atom expr)
    0
    (+ 1 (caixas (car expr)) (caixas (cdr expr)))
  )
)

Questão 4

(defun poly-add (p1 p2)
  (tira-zeros-final (poly-add-simples p1 p2))
)

;;; a funcao poly-add-simples simplesmente soma as listas
;;; componente a componente; se uma delas acabar, soma soh a outra

(defun poly-add-simples (p1 p2)
  (cond
    ((null p1) p2)
    ((null p2) p1)
    (t (cons (+ (car p1) (car p2))
             (poly-add-simples (cdr p1) (cdr p2))
    )
  )
)

;;; a funcao tira-zeros-final recebe uma lista e retorna a
;;; mesma lista mas com os zeros no final (se houver) removidos

(defun tira-zeros-final (lista)
  (reverse (tira-zeros-inicio (reverse lista)))
)

;;; a funcao tira-zeros-inicio eh similar a tira-zeros-final,
;;; soh que age no inicio da lista

(defun tira-zeros-inicio (lista)
  (cond
    ((null lista) nil)
    ((= 0 (car lista)) (tira-zeros-inicio (cdr lista)))
    (t lista)
  )
)

Critérios de correção

Exceto pela Questão 1, o critério de correção começou por decidir como seria a pontuação: de cima para baixo ou de baixo para cima. Se a resposta estava bem escrita, com sintaxe Lisp correta, resolução do problema pedido (e não de outro) e com comprimento proporcional à complexidade da questão, então a correção procedeu de cima para baixo, ou seja, parte-se do valor integral e vão sendo subtraidas frações de pontos para cada defeito encontrado.

Por outro lado, se a resposta estava mal escrita, com sintaxe errada, resolvendo o problema errado ou incompleta, então a correção procedeu de baixo para cima: parte-se de zero e vão sendo adicionadas frações de pontos a cada indício de conhecimento importante encontrado. Embora em geral a correção de cima para baixo resulte em notas maiores numa questão, é possível ter exceções a esta tendência.

Nas questões de escrita de código Lisp, os seguintes critérios foram universalmente aplicados:

Critérios de cima para baixo:

Critérios de baixo para cima:

A seguir, critérios específicos para cada questão. Nas questões de código, são todos critérios de cima para baixo.

Questão 1

Cada item valeu 0,5.

Questão 2

Questão 3

Questão 4


MC336 Home

© 2013 João Meidanis