2015-10-14 1 views
2

Je suis nouveau à LISP et je n'arrive pas à comprendre ce que fait le LISP suivant?Sortie du programme LISP

(setq A '(RIGHT ARE YOU)) 
(print (reverse (list (first (rest A))(first (rest (rest A))) (first A) 'HOW))) 

setq attribue des variables lexicales

Répondre

2

Il imprime:

(HOW RIGHT YOU ARE) 

La première ligne assigne une liste des 3 éléments au symbole A. Ceci est cité pour empêcher l'évaluation du (RIGHT ARE YOU) comme une fonction appelée RIGHT. La deuxième ligne fait une logique inutilement verbeuse et complexe pour créer essentiellement une liste composée de quatre éléments: la chaîne HOW et les trois éléments de A.

Décomposer la deuxième ligne:

  • (first (rest A)) - Ceci renvoie l'élément YOU de A
  • (first (rest (rest A))) - cela renvoie l'élément ARE de A
  • (first A) - cela renvoie l'élément 'DROITE' de A

Th vous laisse maintenant avec:

(print (reverse (list ARE YOU RIGHT 'HOW))) 

Quels LISP apprenez-vous? Beaucoup de LISP ont une notion de REPL (read-eval-print loop) qui vous permet d'expérimenter avec des expressions complexes et de les décomposer en plus petits morceaux pour comprendre les résultats des étapes intermédiaires.

+0

comment avez la position de vous et que le changement? – Beast

+0

Je commence juste avec un livre. débutant complet. – Beast

+0

quel dialecte Lisp? – leeor

1

Peut-être cette transcription d'une séance de REPL à Common Lisp éclairera:

CL-USER> (setq a '(right are you)) 
(RIGHT ARE YOU) 
CL-USER> (print (reverse (list (first (rest a)) (first (rest (rest a))) (first a) 'how))) 

(HOW RIGHT YOU ARE) 
(HOW RIGHT YOU ARE) 
CL-USER> a 
(RIGHT ARE YOU) 
CL-USER> (rest a) 
(ARE YOU) 
CL-USER> (cdr a) 
(ARE YOU) 
CL-USER> (first (rest a)) 
ARE 
CL-USER> (cadr a) 
ARE 
CL-USER> (rest (rest a)) 
(YOU) 
CL-USER> (cddr a) 
(YOU) 
CL-USER> (first (rest (rest a))) 
YOU 
CL-USER> (caddr a) 
YOU 
CL-USER> (first a) 
RIGHT 
CL-USER> (car a) 
RIGHT 
CL-USER> (values (first (rest a)) (first (rest (rest a))) (first a) 'how) 
ARE 
YOU 
RIGHT 
HOW 
CL-USER> (list (first (rest a)) (first (rest (rest a))) (first a) 'how) 
(ARE YOU RIGHT HOW) 
CL-USER> (list 'are 'you 'right 'how) 
(ARE YOU RIGHT HOW) 
CL-USER> (reverse '(are you right how)) 
(HOW RIGHT YOU ARE) 
CL-USER> '(how right you are) 
(HOW RIGHT YOU ARE) 
CL-USER> (print '(how right you are)) 

(HOW RIGHT YOU ARE) 
(HOW RIGHT YOU ARE) 
CL-USER>