Enunciado distribuído na sala.
cons
list
append
cons
list
(defun pula (lista) (if (null lista) nil (cons (car lista) (pula (cddr lista))) ) )
(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))) ) )
(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) ) )
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:
append
em vez de cons
, cadr
em vez de cddr
, cons
ou listp
em vez de consp
, etc.): -0,5cons
, list
, etc.) a mais ou a menos: -0,5A seguir, critérios específicos para cada questão. Nas questões de código, são todos critérios de cima para baixo.
Cada item valeu 0,5.
nil
em vez do nome do parâmetro: -0,5(car lista)
em vez de lista
: -0,5=
aritmético para comparar expressões em geral: -0,5cons
: -0,5%
para indicar mod
: -0,5last
de forma errada: -0,5null
ou (= (car L) 0)
em vez de atom
: -0,5caixas
em lugar do parâmetro: -0,5cdr
era nulo: -0,5quote
onde não deveria: -0,5nil
se os argumentos eram iguais: -0,5© 2013 João Meidanis