-
[CLISP] APPLY et OR
Bonjour,
une fonction sous CLISP me retourne une liste de booléens sous cette forme
Code:
T NIL T NIL NIL NIL
Je veux savoir si il y a au moins un true dans le resultat et j'ai essayé via un apply sur un or. Bien sur, cela ne fonctionne pas car OR est une macro et non une fonction. Cependant, je ne sais pas comment contourner le probleme. Des idées?
Merci d'avance de votre aide!
-
Je ne connais que peu LISP mais en LISP T=true et NIL=false.
Donc si ta fonction te renvoie une liste de booléens contenant ce que tu a ecrit, oui elle contient des valeurs vraies.
Pour parcourir des elements d'une liste, tu peux utiliser car et cdr, comme en scheme, car renvoie le premier element et cdr le reste de la liste.
donc prendre le premier element car(Liste)
le deuxieme -> cadr(liste)
le troisieme -> caddr(liste)
...
ici tu pourras comparer avec tes or non?
-
Bonjour !
Tu pourrais peut-être même te passer de la liste des booléens en utilisant MEMBER, MEMBER-IF, FIND, FIND-if, ou bien SOME et EVERY. Par exemple, si tu veux savoir s'il y a un élément non-NIL dans une liste LST, tu peux écrire
Code:
(some #'identity lst)
ce qui renvoi T ou NIL
ou
Code:
(find-if #'identity lst)
ce qui renvoi le premier élément non-NIL.
À propos, ce n'est pas du tout particulier de GNU CLISP, ça appartient à la norme ANSI.