Je cherche un moyen d'extraire tous les éléments d'une liste en commun LISP. Comme ceci éditer: l'exemple d'utilisation que j'ai donné n'a été très bien pensé, mais je suis toujours curieux s'il est possible de sortir d'une liste comme dans l'exemple ci-dessus. < / p> p>
4 Réponses :
Je pense que vous recherchez peut-être ceci:
http: // cl-cookbook.sourceforge.net/macros.html#ltohtocentry-2 P>
C'est surtout tout ce qu'il y a à corriger. Il n'y a que deux autres articles à signaler. D'abord, si vous écrivez ", @ e" au lieu de ", e" alors le La valeur de E est épissée dans le résultat. Donc si v = (oh boy), alors `(zap , @ v, v) évalue à (zap oh garçon (oh garçon)). La deuxième occurrence de V est remplacé par sa valeur. Le premier est remplacé par les éléments de son valeur. Si V avait eu de la valeur (), cela aurait disparu entièrement: le la valeur de (zap, @ v, v) aurait été (zap ()), qui est la même que (zap nil). p> blockQuote>
lire vos commentaires: P>
(Certaines macro (liste de rupture '(A b c d)) est équivalente à (certains macro' A 'B' C 'D) P> blockquote>
avec ceci, vous pouvez faire: p>
xxx pré> et vous obtiendriez: p>
(some-macro a b c d)
Mais puisque je dois utiliser BackQuote afin d'utiliser, je suis toujours laissé avec la liste extérieure. Mais oui, je cherche un équivalent de l'opérateur @ qui peut être utilisé sans BackQuote.
Je pense que vous pouvez l'utiliser de toute façon, exemple en cours ;-)
Je ne devrais-je pas écrire une macro qui retourne `(une macro, @ '(a b c d)) à utiliser cela?
Assurez-vous, il suffit d'utiliser ceci techniquement pas "sortir de la liste"; Il utilise simplement des éléments de la liste comme des arguments sur un appel de la fonction. P> (Disclaimer: Je suis un schéma, pas un lisper commun, et il peut y avoir un moyen plus idiomatique d'obtenir le même résultat .) p> p> Appliquer code>:
Vous avez raison, cela fonctionne pour l'exemple que j'ai donné. Cependant, l'exemple que j'ai donné était un peu défectueux alors je l'ai supprimé. Je suis surtout curieux si une pause de la fonction de liste ou de l'opérateur existe
Ce que vous démontrez semble être la question de savoir comment obtenir les éléments d'une liste comme valeurs multiples em>: Voir aussi Bind code> et NTH-Valeur code> dans l'hyperspec. p> p>
tandis que (appliquer # 'valeurs' (1 2 3)) CODE> fonctionne Il existe également une fonction à celle-ci appelée Liste des valeurs code> qui est utilisée comme ceci: (values-list '(1 2 3))
Que signifie "extraire" ou "séparer"? Qu'est ce que ça fait? Si vous souhaitez imprimer des éléments de liste sur le terminal, cartographiez-les sur eux.
Avec extrait, je veux dire l'inverse de la liste. Une fonction où
(liste de rupture '((a b c))) code> retournerait `(a b c)L'inverse? Qu'est-ce que c'est? Dans votre exemple, vous venez de prendre le premier élément. Peut-être que vous voulez dire une sorte de «aplatissé», où tous les atomes d'une liste ou de ses sublistes sont déplacés dans une seule liste de plats?
Ok, ce que je veux, c'est que certains construisent de telle sorte que:
(une macro (pause-liste '(ABCD))) code> équivaut à(certains macro' A 'B' C 'D ) code>. Pour les fonctions, je pourrais utiliser Appliquer comme Chris Jester-Young a souligné ci-dessous.