为了看懂代码结构,我把代码按传统的方式进行整理,然后发现,套娃成这样看不懂是应该的

想问下大家,emacs的代码习惯将右括号弄在同一行,嵌套多了的时候,是如何顺利阅读整个结构的,熟能生巧吗?那当初刚入门的时候,不会觉得难受吗?

别看括号,看字。

另外,主流语言(比如说类 C 的语言)里强调不要嵌套层数太多是因为类 C 语言里「嵌套≈更多更深的控制流」,而 Lisp 里嵌套不一定有控制流。所以没必要强求压扁。

6 个赞

(图片来自 GitHub - tarsius/paren-face: A face dedicated to lisp parentheses)

10 个赞

太形象了 :sweat_smile:

主要还是对elisp不熟悉,作为新手看到这种格式,阅读起来太难受了

关于elisp的括号显示有两套方案,就是上面提到的paren-face和rainbow-delimiters,分别是隐藏括号和为括号着色。如果你稍微熟悉了lisp风格的排版,你可以只着色光标所在位置和与其对应位置的那对括号,并且着色缩进来帮助你确定语法结构,关于以语法结构来移动光标和编辑,本论坛比较推荐的大概是懒猫的fingertip

如果你需要,请看此处: topic/28495

以及此处: emacs-builtin-mode/11937

关于高亮: lisp-extra-font-lock/29549


elisp的原型之一MacLisp比C老了一点,非要说传统大概也没那么传统,追溯到algol上这俩也是差不多的

2 个赞

谢谢提供相关链接,我说的"传统"不太准确,应该是"比较常规、容易阅读"的排版方式。

Lisp系长得都不好看,大家都依靠合理的缩进和编辑器着色来阅览代码,而elisp是属于最丑的那个梯队的:函数名长得要命,各种代码风格混搭,空格tab混着用。即使编辑器给力也很难说好看。只能说得靠经验形成自己的一套审美了。

1 个赞

你把括号全去掉然后当 Python 来读 :nerd_face:
1000042064

6 个赞

让ai帮忙写代码的时候,也经常碰到最后收尾的时候右括号不匹配的情况 :rofl:

2 个赞

其实看了多种写法后,才反应过来,elisp好像不介意把代码全部弄成一行,如果你看得过来的话。

但是其他语言好像不是这样的,有强制换行这种要求。

1 个赞

关于这个问题,站里有一个大略的讨论:topic/28045/6

(或者)换行/缩进敏感语义本就不是必要的,只是这样相对来说更美观,更具备自然语言语义的直观,所以我们现在才看到这么多缩进敏感语言大行其道(Haskell在ghci和实际编译中写法不同的设计或许也与此有关)

1 个赞

所以说 python 也是一种 lisp 方言

1 个赞

使用好看的主題和字體很重要,你的主題和字體都很丑,你的括號顏色都不一樣,看着費勁很正常。

那个括号颜色应该是 rainbow-delimiters 自动打的。字体和主题的话就不纠结了,windows下能正常显示,看着舒服就ok了,毕竟当时也挑了很久,习惯了。

彩虹括号的颜色在一些较为成熟的设定里是指定了的,通常采用交替的高低对比度颜色,你可以在:custom-face下自己改一改(同时换一个缩进方案)

除了python shell之类的脚本语言,正经的语言都是这样的

我觉得他是故意的 因为目前社区里lisp不也和python一样 缩进和括号绑定了嘛 重点是 他是做到了缩进和括号绑定了的 所以他是不用数括号 只要数缩进的

1 个赞

动图中的人物是 Scheme 的作者之一 Gerald Jay Sussman,在 MIT 讲他写的书 SICP :new_moon_face:

连接直达 :laughing:

1 个赞