Responda conforme a questão:
Escreva códigos em Lisp para executar as seguintes tarefas:
Somar os elementos de uma lista (6 escores)
Escreva códigos em Lisp para executar as seguintes tarefas:
Somar os elementos de uma lista (6 escores)
Passo 1
O enunciado pede uma função em Lisp que receba uma lista de seis escores e devolva a soma de todos eles. Para resolver, podemos usar recursão ou aproveitar a função de ordem superior
reduce
, que itera sobre a lista aplicando um operador.Passo 2
Definimos uma função recursiva
soma-lista
que verifica se a lista está vazia. Se estiver, retorna 0
; caso contrário, soma o primeiro elemento ao resultado da chamada recursiva sobre o restante.Passo 3
Alternativamente, definimos
soma-lista-reduce
usando reduce
com o operador +
, percorrendo toda a lista e acumulando o total, iniciando em 0
.Passo 4
Testamos com uma lista de exemplo, por exemplo
'(\(1087965\))
, e esperamos obter 45
.Resposta
(defun soma-lista (lista)
"Soma recursivamente todos os elementos de LISTA."
(if (null lista)
0
(+ (first lista)
(soma-lista (rest lista)))))
(defun soma-lista-reduce (lista)
"Soma todos os elementos de LISTA usando reduce."
(reduce #'+ lista :initial-value 0))
;; Exemplo de uso:
;; (soma-lista '(\(1087965\))) ; \(\Rightarrow 45\)
;; (soma-lista-reduce '(\(1087965\))) ; \(\Rightarrow 45\)