Estoy intentando escribir un pequeño programa recursivo que prueba una lista y devuelve t si cada elemento es un átomo. El problema que tengo es que cuando la función recibe una lista vacía, devuelve t en lugar del resultado deseado de nil. No puedo encontrar una forma de que devuelva nil para una lista inicialmente vacía y todavía funcione correctamente de forma recursiva.Comprobación recursiva de átomos en una lista
(defun only-atoms (in)
(if (null in)
t
(and (atom (first in)) (only-atoms (cdr in)))
)
)
anidadas Defuns están equivocados. Para funciones locales use FLET o Labels. No, evite la repetición a menos que sepa lo que está haciendo y/o está programando con Scheme. –
Sabía que debería haber agregado un comentario acerca de que no estaba muy familiarizado con CL. Principalmente he trabajado con Scheme, y comenté por eso. Mi error. :) Sin embargo, no creo que esto invalide la respuesta principal: verifique primero, recurse más tarde. – vhallac
El esquema permite definir DEFINE, en Lisp los DEFUNS anidados son un error y no harán lo que usted cree que hacen. –