你直接看Reference当然看不懂。
感兴趣的话可以先看 Beautiful Racket: Make a language in one hour: stacker 入门
然后再看 Racket Guide 17 Creating Languages
另外,你要的 1 + 9 * 6
在Racket Guide里就有实现 17.2 Reader Extensions
你直接看Reference当然看不懂。
感兴趣的话可以先看 Beautiful Racket: Make a language in one hour: stacker 入门
然后再看 Racket Guide 17 Creating Languages
另外,你要的 1 + 9 * 6
在Racket Guide里就有实现 17.2 Reader Extensions
多谢 多谢 多谢
感觉中国人不应该钻研这些邪教,elisp就行了,饭都吃不饱,学那么多没用的东西干吗
乔布斯说过 饭不能吃太饱 人也不能太聪明
elisp 就不是邪教了吗🌚
最近又发现一个Lisp的优势,即所谓命名优势
。
我发现很多语言对Naming Convention
有限制,比如:
大部分语言的名字都不允许带hyphen(这是因为中缀语法需要处理减号的问题),而Lisp允许。不要小看这一点命名上的优势,它给编程带来很大便利。
比如:Java的包名要求小写,但不能用hyphen
。如果你的包名里包含两个单词组成的短语,则会要求写成驼峰式,很难看。
另一个极端的例子是 C#,它的Naming Convention
要求:类名大写、方法名大写。这很容易造成类名和方法名重名的情况,从而要你不得不换名字。
lisp可以以数字开头创造symbol,别全数字就行,比如124abc
Go语言甚至强制导出所有大写字母开头的符号
是的,这一点很方便。
不仅如此,Lisp的包名管理也优于Java和C#。
Java和C#这类有名字空间管理的语言,类名和包名和文件名和路径对应,这导致文件名和路径开头不能是数字。从而无法排序。
你只能定义:
Test1.cs,
Test2.cs,
Test3.cs
而无法定义:
1-Test.cs
2-Test.cs
3-Test.cs
注意:前者只能Test开头(否则无法排序),而后者在数字后面可以跟不同的概念名字。
可以用文件的第一行注释做排序的
写个脚本挺简单的
不仅可以排序 还可以分类 归纳关键字
至于用–做分割符 和__也没什么区别呀
我说的排序不是在treemacs里,而是在任何地方。
比如:在github上浏览的时候可以很清楚的看到文件的先后次序。
看到文件的先后顺序,我也有这样的想法
可是发现 文件之间很多的时候是一颗树 而不是一个列表 也就没有了所谓的先后
即使文件是一棵树,每个节点的 children 仍然是一个列表。
树可以用目录代替,一个目录下的 子目录的名字 和 文件的名字 都可以有先后关系。
我感觉这完全不是优势, 过度的自由不一定是好事, 有可能会砸到自己的脚.
golang做了很多限制, 初衷是让人少犯错误, 效果还不错, 现在已经习惯了. 相对于c++里的public和private, 大写开头更容易辨识, 否则像c++还要看下头文件或者文档才知道. python也有下划线开头的约定.
缩进是好的,py强制缩进是坏的。如果不小心打了大写开头的呢?意外导出了怎么办。就像py不小心多缩一下就debug半天一样。
那你觉得没有泛型,只有interface based OO,也是大道至简吗
不小心打了大写开头, 对我自己来说完全不可能, 可能已经形成本能反应了.
不是, 这个实践中感觉挺痛苦的. 不过官方已经在考虑增加泛型. 语言一开始从最少特性和严格限制, 到后面根据用户反馈和实践经验慢慢增加新特性, 这种比较可控一点, 会慢慢进化得更好, 如果一开始就全放开, 后面将很难控制. 就像c++, 可以存在多种风格, 学习周期漫长, 让人很头疼.
没啥好不好的,两种语言的目地不同,可以说各有取舍,不然为什么要在造一个语言?golang放开也就不是golang,C++做限制也就不是C++了。
你有沒有想过这个先后关系在不同情境下可以是不同的?是可以基于文件大小,创建时间这类全然和文件名无关的信息的。
说实话这不见得有多大好處,反而让这些写 parser 和 code analysis 的人很难做。
不只是 Lisp,而是动态类型语言的优势正在消失,一些新出现的静态类型语言在表达能力上取得了长足进步。
从软件工程的角度来说,为了可维护性我们应该精确定义问题、以及解决方案,从而不再需要动态性、灵活性,而且会把代码中出现的动态性、灵活性当成一个信号:我们可能还没有想清楚要解决什么问题。然后我们会做一些重构,甚至重新设计,以便消除动态性和灵活性。
Lisp 是最好的动态类型语言,但是因为它松散的组织形式,很难成为普及最广的动态语言,它可能会像 Smalltalk 语言之于 OOP,成为思想的源泉。Lisp 有一个杀手级应用 Emacs,所以 Lisp 会成为我个人手中的瑞士军力,而不是 Javascript 或 Python。
语言中有很多独特的东西令人怀念,比如 C++ 的RAII,Lisp 的 S 表达式,Python 的缩进。但是这些就像美女嘴角的痣,在她的美丽年华里看到它会令人心动,当她老去我们就只剩怀念,对于新一代的人来说,他眼中看到的可能是一颗肉瘤。
现代的动态语类型言都有虚拟机 也有字节码
你觉得Scala是动态类型的 还是静态类型的?