从表达式到函数:表面的简洁
scheme/lisp中,(基于運算元、運算符的)表達式運算是一個語法基礎,但它們被稱為函數式語言而非表達式語言。那么,它們是如何解釋函數式語言的呢?
一個lisp的函數在語法上應當書寫為如下格式:
----------------
((lambda (p1...pn) e) a1...an)
----------------
這是什么意思呢?其實,這其中的p1..pn為形式參數,而a1..an為實際參數,而lambda則是一個從天上掉下來的概念,它被用來作為一個函數標識符的命名——就好象四則運算中的x,y,z只是命名一樣。換成JavaScript的語法,就是這樣:
----------------
function lambda(p1,p2) { // ... pn
? e
}
lambda(a1,a2); // ... an
----------------
當然,javascript作為函數式語言,你也可以聲明即調用。如下:
----------------
(function lambda(p1,p2) {
? e
})(a1,a2))
----------------
所以,事實上較規范的lisp函數調用語法風格與上面的并沒有什么不同:
----------------
((lambda (p1,p2)
? e
?) a1 a2)
----------------
按照約定,e是一個或一組表達式。這里就回到上一篇文章(在這里)說的了:表達式是語言基礎:
-----------
(symbol)
-----------
在表達式、值(以及變量)、函數等基本概念上,javascript與lisp/scheme沒有什么不同。不過,后者是面向表(list,一個值或函數的序列)來處理的,而javascript則面向關聯數組(屬性包,一個“名-值”對的表)。
轉載于:https://www.cnblogs.com/java0818/archive/2007/10/08/2144517.html
總結
以上是生活随笔為你收集整理的从表达式到函数:表面的简洁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java教程 实战学习Struts实例
- 下一篇: 翻译JScript中的面向对象系列文章