2016-02-23 4 views
0

J'ai cette expression,liste Lisp question de manipulation

(write (cdr (car' ('(p q) r)))) 

http://ideone.com/bkZv20

qui donne ((P Q)) comme la sortie. Je me suis gratté la tête toute la journée et je n'arrive toujours pas à comprendre comment cela fonctionne.

Faire seulement la partie car donne,

(write (car' ('(p q) r))) 

donne '(P Q).

Ensuite, selon moi (cdr '(P Q)) devrait donner (Q) comme sortie.

Comment est la réponse finale, '(P Q) est ma question.

+0

Quel est ce mystère 'car'' vous fonctionnez semblez employer? Voulez-vous vraiment utiliser '' 'pour citer deux fois? –

+0

J'ai reçu l'expression de cette façon! Jetez un oeil sur le lien, – saruftw

+0

Je pense que vous pourriez trouver les réponses à [Remplacer les éléments dans les listes quotées imbriquées ajoute de nouveaux éléments?] (Http://stackoverflow.com/questions/24370500/replace-elements-in-nested-quoted -lists-adds-new-elements) utile. –

Répondre

6

Vous avez une citation supplémentaire (la première est collée à la car mais toujours reconnue à juste titre) là-dedans qui provoque une citation entre guillemets, donc ce que vous avez essentiellement est:

(write (cdr (car '((quote (p q)) r)))) 

Prendre le car de cette vous laisse avec seulement les données:

(quote (p q)) 

Et reprenant le cdr cela se traduit par les données:

(p q) 

Comme vous avez observé. Si vous regardez la voiture de la voiture à la place avec

(write (car (car '((quote (p q)) r)))) 

vous devriez voir le

quote 

lui-même. Rappelez-vous que '(a b) et (quote (a b)) sont la même chose, et l'impression de tout ce que vous utilisez peut montrer l'une ou l'autre forme.

donc ce que vous voulez faire est de supprimer tout simplement la citation supplémentaire, i.e. .:

(write (cdr (car '((p q) r)))) 
+0

Mais quelle est la raison pour laquelle je reçois cette réponse? – saruftw

+0

J'ai édité le premier code un peu coupé, pouvez-vous voir ce qui se passe maintenant? –

+0

pourriez-vous s'il vous plaît décomposer le flux (résultat à chaque étape)? le rendrait plus facile à comprendre. Merci . – saruftw