我在elisp非常新,刚开始学习它。我在文档中看到了以下表达式:
(1+ (buffer-size))
(+ 1 (buffer-size))
他们是什么意思?我知道elisp使用前缀表示法,所以第二个应该是正确的。但是它们都可以毫无错误地执行。第一个来自point-max
函数的文档。
感谢。
答案 0 :(得分:4)
令牌1+
是表示符号的标识符。此符号具有绑定作为函数,因此(1+ arg)
表示"调用1+
函数,其值为arg
。 1+
函数返回1
加上其参数的值。
语法(+ 1 arg)
是实现该效果的另一种方式。这里的函数由符号+
命名。 +
函数接收两个加在一起的参数。
在当今流行的许多主流编程语言中,标记化规则使得1+
和1 +
之间没有区别:这两者都表示数字常量后跟+
标记。 Lisp标记化是不同的。 Lisp系列中的语言通常支持包含可包含数字和非字母数字字符的标记。我正在查看Emacs Lisp参考手册,但没有看到有关read
函数用于将打印表示转换为对象的逻辑的部分。通常," Lispy"令牌化行为是这样的:首先扫描令牌而不考虑它是基于累积作为有效令牌成分的字符的那种令牌,停留在不是令牌成分的字符上。例如,当输入为abcde(f
时,将提取的标记为abcde
。 (
字符终止令牌(并保留在输入流中)。然后,根据给定Lisp方言的规则,重新检查和分类产生的字符abcde
丛,根据它看起来将其转换为对象。在Lisp方言中,我们可以广泛地依赖所有字母字符的标记来表示符号,并且所有数字的标记(可能带有前导符号)表示整数。 1+
有一个尾随+
,但这是不同的!