首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LISP程序输出

LISP程序输出
EN

Stack Overflow用户
提问于 2015-10-14 01:53:46
回答 2查看 83关注 0票数 2

我对LISP很陌生,不知道下面的LISP是做什么的?

代码语言:javascript
复制
(setq A '(RIGHT ARE YOU))
(print (reverse (list (first (rest A))(first (rest (rest A))) (first A) 'HOW)))

setq分配词法变量

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-14 01:57:54

它打印:

代码语言:javascript
复制
(HOW RIGHT YOU ARE)

第一行将3个元素的列表分配给符号A。这是为了防止将(RIGHT ARE YOU)计算为称为RIGHT的函数。第二行执行一些不必要的冗长和复杂的逻辑,基本上创建一个由四个元素组成的列表:字符串HOW和来自A的三个元素。

打破第二条线:

  • (first (rest A)) -这将从A返回元素YOU
  • (first (rest (rest A))) -这将从A返回元素ARE
  • (first A) -这将从A返回元素“右”

这现在留给你的是:

代码语言:javascript
复制
(print (reverse (list ARE YOU RIGHT 'HOW)))

你在学哪种口音?许多LISP有一个REPL (读- experiment循环)的概念,它允许您对复杂表达式进行实验,并将它们分解成较小的块,以了解中间步骤的结果。

票数 2
EN

Stack Overflow用户

发布于 2017-10-30 15:41:25

也许这个REPL会议的记录将启发我们:

代码语言:javascript
复制
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> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33115338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档