我是LISP的新手,無法弄清楚以下LISP會做什麼?LISP程序輸出
(setq A '(RIGHT ARE YOU))
(print (reverse (list (first (rest A))(first (rest (rest A))) (first A) 'HOW)))
setq
分配詞法變量
我是LISP的新手,無法弄清楚以下LISP會做什麼?LISP程序輸出
(setq A '(RIGHT ARE YOU))
(print (reverse (list (first (rest A))(first (rest (rest A))) (first A) 'HOW)))
setq
分配詞法變量
它打印:
(HOW RIGHT YOU ARE)
第一行分配3個元素分配給符號A
的列表。引用這是爲了防止將(RIGHT ARE YOU)
作爲RIGHT
的函數進行評估。第二行做了一些不必要的冗長和複雜的邏輯,基本上創建了一個由四個元素組成的列表:字符串HOW
和A
中的三個元素。
打破的第二行:
(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),它允許您試驗複雜的表達式並將它們分解爲更小的塊,以瞭解中間步驟的結果。
也許這份成績單用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>
你是怎麼的位置,是變革? – Beast
我剛從一本書開始。完成新手。 – Beast
哪個lisp方言? – leeor