写了一本关于 elisp 语法快速概览的笔记,有需求的小伙伴可以自取

https://github.com/JanSky520/emacs_Chinese

10 个赞

笔记目前还在更新中,预计下周能完更。同时项目里还有 orgmode 的官方文档的翻译,后续也会出一个 org 的笔记,有兴趣的同学可以点点 star

感觉一些英文梗可能需要用括号标注一下?

“参数”一词来源于数学中的用法,并不指两个人之间的争论;相反,它指的是传递给函数的信息

改成这样:

“参数” (argument) 一次来源于数学中的用法, 并非指两个人之间的争论 (argument); 相反, 它指的是传递给参数的信息 (parameters)

还有一些英文表达和中文表达不同的问题 (?) 比如 “回显区域” (echo area?) 有点怪怪的, 安装函数定义 (install the definition of a function?) .

不过感觉很不错的样子, 可以用来拿给别人传销 emacs 了.

这种好人好事应该点个支持,另外,3楼说的有道理。

感谢建议,项目还在持续完善中,暑假会抽空把文章重新润色一遍,或者有空的小伙伴也可以提交 PR 一起参与本项目的更新 :smiling_face_with_three_hearts:

尾递归是一种特殊的递归形式,它可以被编译器优化为迭代,从而避免递归带来的堆栈溢出问题

Emacs 似乎是没有尾递归优化的?随便测试了一下,纯解释、byte-compilenative-compile 都会 Lisp nesting exceeds ‘max-lisp-eval-depth’。(不知道 Guilemacs 怎么样)

另外,因为不经常看文档所以花了好久才反应过来另两篇是 C-h R eintr/orgguide 的翻译。至少把许可证和来源放一放会比较好吧。

有的,named-let

当时翻译完了给orgmode官方发了个邮件,希望能在orgmode加一个我这个中文翻译。然后官方回我了让我改下page发给他们,我没明白啥意思就一直没回这个邮件:cry::cry:

这封邮件 吗?可能是因为 orgguide 文件在 orgmode(而不是 orgweb)仓库里,没有加翻译的先例,所以让你把网页和 PDF 放到网上(如 GitHub pages),然后再从 orgweb 链接过去? 但看起来已经从官网链接到你的博客了( 手册 | Org 主模式 (“用普通话”))。

居然已经链接了,我都不知道这事:smiley::grin::grin:

@Kana @SPQR

严格来说 emacs 没有 properly tail-call optimization,中文大概是「所有尾调用变为跳转的优化」,而 named-let 只能处理一些特定情况。实际上,不止是 named-let 可以将尾递归翻译成 while,cl-labels 也支持,或者说 named-let 就是用 cl-labels 实现的。优化的具体实现,见 cl–self-tco

1 个赞

https://emacs.stackexchange.com/a/76245/39388


另外注意必须开 lexical binding 才能用 named-let

https://emacs.stackexchange.com/q/77755/39388

Emacs有尾递归优化,需要native-comp并且native-comp-speed设置为3的情况下才有(默认为2)

2 个赞

那我猜测 byte compile 也可以优化 (?)

不可以,native comp和bytecomp用的IR不一样。native comp是到LIMPLE->GIMPLE,libgccjit支持C,本质上是个泛用后端。bytecomp是在emacs内部的lisp虚拟机上执行,依赖elisp的过程原语,后端层面支持没有那么好。

1 个赞

还真行。

(defun add (a b)
  (cond
   ((= b 0) a)
   (t (add (+ a 1) (- b 1)))))

(let ((native-comp-speed 3))
  (native-compile 'add))

(add 1 20000)
;;=> 20001
1 个赞