2 votes

Une simple fonction lisp

J'ai écrit une fonction de test pour vérifier ma compréhension de "return-from" en Lisp

(defun testp (lst)
  (mapc #'(lambda (x y)
            (if (null lst)
                (return-from testp t)))
        lst
        (cdr lst)))

Je pense que le test (testp 'nil) devrait renvoyer T mais il renvoie NIL. Pourriez-vous m'aider à comprendre pourquoi il renvoie NIL?

Un grand merci.

3voto

Rainer Joswig Points 62532

Vous appelez MAPC sur deux listes vides.

Comment la fonction LAMBDA devrait-elle jamais être utilisée si les listes n'ont aucun élément à mapper ?

Au fait, vous pouvez écrire 'liste' au lieu de 'lst'.

(defun testp (liste)
  (mapc #'(lambda (x y)
            (if (null liste)
                (return-from testp t)))
        liste
        (cdr liste)))

3voto

mquander Points 32650

Normalement, mapc appliquera votre lambda à chaque élément d'une liste. Je suppose (je n'utilise pas Common Lisp) que étant donné que mapc n'a aucun élément dans la liste sur lequel opérer, votre lambda ne sera jamais appelée, et par conséquent la valeur de retour de votre fonction est la valeur de retour de mapc, qui (étant donné qu'il n'a rien importé) est nil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X