【问题标题】:What do elisp expression (1+ (buffer-size)) and (+ 1 (buffer-size)) mean?elisp 表达式 (1+ (buffer-size)) 和 (+ 1 (buffer-size)) 是什么意思?
【发布时间】:2016-05-16 19:17:09
【问题描述】:

我对 elisp 非常陌生,刚刚开始学习它。我在文档中看到了以下表述:

(1+ (buffer-size))
(+ 1 (buffer-size))

它们是什么意思?据我所知,elisp 使用前缀表示法,所以第二个应该是正确的。但是它们都可以毫无错误地执行。第一个来自point-max 函数的文档。

谢谢。

【问题讨论】:

  • 1+ 是一个函数。 + 是一个函数。 buffer-size 是一个函数。 M-x describe-function RET buffer-size RETM-x describe-function RET 1+ RETM-x describe-function RET + RET
  • C-h f RET 1+ RETC-h f RET + RET.

标签: emacs lisp expression prefix


【解决方案1】:

令牌1+ 是表示符号的标识符。这个符号有一个作为函数的绑定,所以(1+ arg) 的意思是“调用1+ 函数,以arg 的值作为它的参数)。1+ 函数返回1 加上它的参数的值.

语法(+ 1 arg) 是实现该效果的另一种方式。这里函数以符号+ 命名。 + 函数接收两个参数,并将它们相加。

在当今流行的许多主流编程语言中,标记化规则使得1+1 + 之间没有区别:这两者都表示一个数字常量,后跟一个+ 标记。 Lisp 标记化是不同的。 Lisp 系列中的语言通常支持可以包含数字和非字母数字字符的标记。我正在查看 Emacs Lisp 参考手册,但没有看到有关 read 函数用于将打印表示转换为对象的逻辑的部分。通常,“Lispy”标记化行为是这样的:首先扫描标记而不考虑它是基于什么类型的标记,它基于累积的作为有效标记成分的字符,在不是标记成分的字符处停止。例如,当输入为abcde(f 时,将提取的令牌为abcde( 字符终止令牌(并保留在输入流中)。然后,根据给定 Lisp 方言的规则,重新检查和分类生成的字符块abcde,根据其外观转换为对象。在 Lisp 方言中,我们可以广泛地依赖所有字母字符的标记来表示符号,以及所有数字的标记(可能带有前导符号)来表示整数。 1+ 有一个尾随 +,这是不同的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2013-04-05
    相关资源
    最近更新 更多