Je tente d'écrire un petit programme récursif qui teste une liste et renvoie t si chaque élément est un atome. Le problème que j'ai est que lorsque la fonction reçoit une liste vide, il renvoie t au lieu du résultat souhaité de nul. Je ne peux pas trouver un moyen de l'obtenir nul pour une liste initialement vide et encore fonctionner correctement d'une manière récursive.Recherche récursive des atomes dans une liste
(defun only-atoms (in)
(if (null in)
t
(and (atom (first in)) (only-atoms (cdr in)))
)
)
emboîtées Defuns ont tort. Pour les fonctions locales, utilisez FLET ou les étiquettes. Non, évitez la récurrence sauf si vous savez ce que vous faites et/ou si vous programmez avec Scheme. –
Je savais que j'aurais dû ajouter un commentaire sur mon manque de familiarité avec CL. J'ai principalement travaillé avec Scheme, et j'ai commenté cela. Ma faute. :) Cependant, je ne pense pas que cela invalide la réponse principale: vérifiez d'abord, recurse plus tard. – vhallac
Scheme permet des DEFINE imbriqués, dans Lisp imbriqués Les DEFUNS sont une erreur et ne feront pas ce que vous pensez qu'ils font. –