首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算表达式CLISP

计算表达式CLISP
EN

Stack Overflow用户
提问于 2018-02-23 04:23:51
回答 2查看 89关注 0票数 1
代码语言:javascript
复制
(+ '(1 2 3 4 5) '(3 4 5 6 7))

评估这个表达式。我对CLISP不太了解。当我在CLISP上运行它时,它返回一个错误。

解释错误的原因??

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-23 05:47:38

很有可能你是想把这个连接起来

代码语言:javascript
复制
(+ '(1 2 3 4 5) '(3 4 5 6 7)) ==> '(1 2 3 4 5 3 4 5 6 7)

普通的Lisp没有这样做,因为这是没有意义的。在某些语言(如Python )中,infix操作符数量有限,因此重载+具有一定的意义。但是,在通用Lisp中,函数名是无穷多的,而+只是其中之一,所以我们有不同的函数,比如append

你也有可能期望这能增加点态。

代码语言:javascript
复制
(+ '(1 2 3 4 5) '(3 4 5 6 7)) ==> '(4 6 8 10 12)

它并不是这样做的,因为它也违背了Lisp的哲学。添加像这样的元素是APL或J等默认语言的一个特性,这些语言花费了很多精力才能在最一般的情况下使用这样的特性。因此,它们往往不太关注某些其他特性,例如对象系统或元编程。

这就是Lisp的亮点: Lisp是一种元编程语言,所以他们没有把所有的时间都花在开发数学函数的角落案例上,而是创建了一个简单的函数,它简单地把数字相加在一起,什么也不做,然后把大部分的开发时间花在了一个好的宏系统上。特别是,Common通过拥有我所见过的最好的对象系统之一(具有完全通用的调度)来增加这一点。语言不是万能的,所以最好的语言必须定义一种哲学并坚持它。接受各种输入并不是Lisp的哲学,元编程就是。

票数 4
EN

Stack Overflow用户

发布于 2018-02-23 05:44:28

CLISP本身将给出部分答案:

代码语言:javascript
复制
[1]> (+ '(1 2 3 4 5) '(3 4 5 6 7))

*** - +: (1 2 3 4 5) is not a number

+是一个只定义在数字上的函数,所以当解释器看到一个数字列表作为+的一个参数时,它就不能更进一步了。

解释器将(1 2 3 4 5)视为+在计算'(1 2 3 4 5)之后的第一个参数,即返回(1 2 3 4 5)(quote (1 2 3 4 5))

您可能会认为+更灵活,有点像它在Javascript中的工作方式。不:只是数学加函数。

(翻译为什么不抱怨(3 4 5 6 7)?因为它在看到(1 2 3 4 5)时停止,然后转到调试器提示符。)

顺便说一下,该错误消息是特定于CLISP的,但是任何Common都会在输入上给出一个错误。

编辑: Per @RainerJoswig的评论可能是,正确的描述方式可能不是解释器代码对(1 2 3 4 5)+配对的响应,而是这样做的+函数代码,而不是第二个论点,等等。我所写的是我对描述情况的正确方法的最佳猜测,并部分解决了OP的问题,但我不是Lisp内部专家。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48941093

复制
相关文章

相似问题

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