在网上看到一篇有趣的讨论,is Scheme Lisp ,主要是讨论scheme到底算不算是Lisp的一种方言
个人倾向看作是两门独立的语言,scheme的模型是lambda calculus,主打functional programming,而lisp当初是为了处理符号而设计的语言,两者除了都是s-exp之外很多地方都不一样(ex. 卫生宏vs非卫生宏)
欢迎大家分享看法,或说说对两门语言使用起来的心得
在网上看到一篇有趣的讨论,is Scheme Lisp ,主要是讨论scheme到底算不算是Lisp的一种方言
个人倾向看作是两门独立的语言,scheme的模型是lambda calculus,主打functional programming,而lisp当初是为了处理符号而设计的语言,两者除了都是s-exp之外很多地方都不一样(ex. 卫生宏vs非卫生宏)
欢迎大家分享看法,或说说对两门语言使用起来的心得
废话,几十年大家都这么认为的,陈独秀不是这么秀的。如果scheme不算lisp方言,那c++跟c也没什么关系了。
然而除了 Lisp 以外其他语言有“方言”这个概念么?同时我要举例 ML 就是门起源于 Lisp 但是通常都不会认为是 Lisp 的语言。
所以现在用 CL 的人都在做符号计算么
其他还有么?我帮你数一数吧,相似的函数/宏故意用的名字不一样(甚至还要 function/procedure macro/syntax),#f 和 nil 的区分,first class continuation,module 和 package 的区别勉强算,还有吗?就完全没有了吧。
Lisp-1 Lisp-2 算不了,因为最早的 LISP I 就是公用命名空间的。
秦始皇写的字是中国字吗
为什么和我们写的不一样
scheme standard里有tail call optimization,common lisp的standard里没有规定这个(不过我想大部分的implementation应该都有实现)
scheme里所有东西都是expression,common lisp里应该不是(这点我不确定,有错请指正)
我自己觉得两个语言从思想上就有很大的不同,所以才会认为他们可以归类成不同的语言,当然我不是搞PL的,这只是我非常不专业的想法。
是在讨论 Is scheme a lisp?
还是在讨论 Is scheme a common-lisp?
啥,所有 Lisp 都是 expression 啊。
而且你都说了 TCO 多数都做了。TCO 都算不上什么 novelty,很 trivial 的个 feature。
思想不同?不知道你觉得 CL 有什么思想,反正我不觉得 CL 有什么强加在使用者上所谓思想。反而我觉得 C2W 上有个人的观点我很赞同:
the Scheme design is to disallow things for no good reason other than just to be a bitch to the user.
对我来说这种感受在 R6RS 的 Chez 尤其严重,实际上 Guile 和更为流行的 Racket 在 RnRS 上吸收了很多 CL 的特性,包括在 Scheme 明确允许任意求值顺序下仍然做了保证从左到右求值。两个同样是 Guy Steele 设计的语言本来不应该有多少什么思想区别,更何况你说 Lisp 是做符号运算,而 Scheme 本质上就是研究 actor model 的语言,所谓思想都是后来人强加的东西,尤其是 R4RS 后做了众多向后不兼容的改动,我管这叫“修正主义”
实际上刻意允许任意求值顺序就是为了与 actor model 语义一致,而这些实现在居然在“核心思想”上做妥协,是不是说明本来就没这么个东西么。
所以其实这里有个隐藏的 topic 是 CL 是否能代表所有的 Lisp,我的意见为否定的。但 CL 的确能代表多数人所认知的 Lisp
长知识了,看过evolution of lisp有印象scheme一开始的背景是为了在lisp中加入object所形成的,原来求值顺序没有严格定义是为了跟actor modal一致
跑题发问,能问问您对scheme还有common lisp之间的看法吗?感觉这两个lisp家族分支里您比较常推崇common lisp?但普遍确认为scheme是个更简单, 优雅的语言(换句话说也就是个限制更多, 更倾向学术的语言),想知道您对这两个语言之间的心得
语言大佬又开始深入探讨了,我就来围观下,防沉~
我来 施个魔咒
lisp和非lisp最大的区别应该是数据代码同一性,s表达式,以及括号吧:rofl:
反正我宁可写 SML 也不会选 Scheme。SML 可比 Scheme 学术严谨多了……我只以好玩的角度来,CL 有各种遗产可玩性明显更高罢了。
我学语言也只是为了好玩,不过我追求的不是一个本身就具有各式各样特性的语言,我想要的是一种「麻雀虽小,五脏俱全」的感觉,语言本身只规定最基本, 简单的特性,但是却能由这些基本的元素去实践出各式各样复杂的特性(可以理解为功能健全下的极简主义),不知道大神有没有推荐的语言符合我的需求?
Agda:从 Nat 到 Monad,从 CH isomorphism 到 linear logic。
janet 怎么样?
C
帖子至少应该有 6 个字