LISP程序输出
LISP program output
我是 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))
- 这个 returns 来自 A
的元素 YOU
(first (rest (rest A)))
- 这个 returns 来自 A
的元素 ARE
(first A)
- 这个 returns 来自 A
的元素 'RIGHT'
现在剩下的是:
(print (reverse (list ARE YOU RIGHT 'HOW)))
您正在学习哪种 LISP?许多 LISP 都有一个 REPL(读取-评估-打印循环)的概念,它允许您试验复杂的表达式并将它们分解成更小的块以了解中间步骤的结果。
也许这个 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>
我是 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))
- 这个 returns 来自A
的元素 (first (rest (rest A)))
- 这个 returns 来自A
的元素 (first A)
- 这个 returns 来自A
的元素 'RIGHT'
YOU
ARE
现在剩下的是:
(print (reverse (list ARE YOU RIGHT 'HOW)))
您正在学习哪种 LISP?许多 LISP 都有一个 REPL(读取-评估-打印循环)的概念,它允许您试验复杂的表达式并将它们分解成更小的块以了解中间步骤的结果。
也许这个 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>