LISP程序输出

LISP程序输出,lisp,output,Lisp,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。引用此项是为了防止将(您是对的)作为名为对的函数进行求值。第二行做了一些不必要的冗长和复杂的逻辑,基本上创建了一个由四个元素组成

我是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
。引用此项是为了防止将
(您是对的)
作为名为
对的函数进行求值。第二行做了一些不必要的冗长和复杂的逻辑,基本上创建了一个由四个元素组成的列表:字符串
HOW
a
中的三个元素

分解第二行:

  • (first(rest A))
    -这将从
    A
    返回元素
  • (第一个(rest(rest A))
    -这将从
    A
    返回元素
    ARE
  • (第一个A)
    -这将从
    A
这就给您留下了:

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

你在学哪种口齿不清?许多LISP都有REPL(read-eval-print-loop)的概念,它可以让你尝试复杂的表达式,并将它们分解成更小的块,以理解中间步骤的结果。

也许这篇通用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> 

你和我的立场是如何改变的?我只是从一本书开始。完全是新手。虽然你的结论是正确的,但分类仍然是错误的<代码>(第一个(休息A))
不是
你和
(第一个(休息A))
你不是