2015-10-14 47 views
2

我是LISP的新手,无法弄清楚以下LISP会做什么?LISP程序输出

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

setq分配词法变量

回答

2

它打印:

(HOW RIGHT YOU ARE) 

第一行分配3个元素分配给符号A的列表。引用这是为了防止将(RIGHT ARE YOU)作为RIGHT的函数进行评估。第二行做了一些不必要的冗长和复杂的逻辑,基本上创建了一个由四个元素组成的列表:字符串HOWA中的三个元素。

打破的第二行:

  • (first (rest A)) - 这从A
  • (first (rest (rest A)))返回元素YOU - 这从A
  • (first A)返回元素ARE - 此返回从元件 'RIGHT' A

Th现在留给你:

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

哪个LISP是你学习?许多LISP都有一个REPL的概念(read-eval-print loop),它允许您试验复杂的表达式并将它们分解为更小的块,以了解中间步骤的结果。

+0

你是怎么的位置,是变革? – Beast

+0

我刚从一本书开始。完成新手。 – Beast

+0

哪个lisp方言? – leeor

1

也许这份成绩单用Common Lisp REPL会议将启发:

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>