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