2015-10-14 73 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>