2016-05-16 38 views
1

我在elisp非常新,剛開始學習它。我在文檔中看到以下表達式:elisp表達式(1+(buffer-size))和(+ 1(buffer-size))是什麼意思?

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

這是什麼意思?因爲我知道elisp使用前綴符號,所以第二個應該是正確的。但是他們都可以執行沒有任何錯誤。第一個是來自point-max函數的文檔。

謝謝。

+2

'1+'是一個函數。 '+'是一個函數。 'buffer-size'是一個函數。 'M-x描述函數RET緩衝區大小RET'和'M-x描述函數RET 1+ RET'和'M-x描述函數RET + RET'' – lawlist

+1

'C-h f RET 1+ RET'。 'C-h f RET + RET'。 – Drew

回答

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+雖然有一個尾隨+,這是不同的!