日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Lisp函數(shù)的表示

本文是paul graham所著的《Lisp之根源》的第二部分,介紹了Lisp函數(shù)的表示(***部分)。有關(guān)Lisp函數(shù)表示的具體描述如下:

創(chuàng)新互聯(lián)建站是一家專業(yè)從事成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站設(shè)計(jì)公司,創(chuàng)新互聯(lián)建站依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、成都全網(wǎng)營(yíng)銷推廣及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!

函數(shù)的表示

接著我們定義一個(gè)記號(hào)來(lái)描述函數(shù).函數(shù)表示為(lambda ( ... ) e ),其中  ... 是原子(叫做參數(shù) ),e 是表達(dá)式. 如果表達(dá)式的***個(gè)元素形式如上

 
 
 
  1. ((lambda ( ... ) e )  ... )  

則稱為函數(shù)調(diào)用 .它的值計(jì)算如下.每一個(gè)表達(dá)式 先求值,然后e 再求值.在e 的求值過(guò)程中,每個(gè)出現(xiàn)在e 中的 的值是相應(yīng)的 在最近一次的函數(shù)調(diào)用中的值.

 
 
 
  1. > ((lambda (x) (cons x '(b))) 'a)  
  2. (a b)  
  3. > ((lambda (x y) (cons x (cdr y)))  
  4.    'z  
  5.    '(a b c))  
  6. (z b c) 

如果一個(gè)表達(dá)式的***個(gè)元素f 是原子且f 不是原始操作符

 
 
 
  1. (f  ... )  

并且f 的值是一個(gè)函數(shù)(lambda ( ... )),則以上表達(dá)式的值就是

 
 
 
  1. ((lambda ( ... ) e )  ... )  

的值. 換句話說(shuō),參數(shù)在表達(dá)式中不但可以作為自變量也可以作為操作符使用:

 
 
 
  1. > ((lambda (f) (f '(b c)))  
  2.    '(lambda (x) (cons 'a x)))  
  3. (a b c) 

有另外一個(gè)函數(shù)記號(hào)使得函數(shù)能提及它本身,這樣我們就能方便地定義遞歸函數(shù).3 記號(hào)

 
 
 
  1. (label f (lambda ( ... ) e ))  

表示一個(gè)象(lambda ( ... ) e )那樣的函數(shù),加上這樣的特性: 任何出現(xiàn)在e 中的f 將求值為此label表達(dá)式, 就好象f 是此函數(shù)的參數(shù).

假設(shè)我們要定義函數(shù)(subst x y z ), 它取表達(dá)式x ,原子y 和表z 做參數(shù),返回一個(gè)象z 那樣的表, 不過(guò)z 中出現(xiàn)的y (在任何嵌套層次上)被x 代替.

 
 
 
  1. > (subst 'm 'b '(a b (a b c) d))  
  2. (a m (a m c) d) 

我們可以這樣表示此函數(shù)

 
 
 
  1. (label subst (lambda (x y z)  
  2.                (cond ((atom z)  
  3.                       (cond ((eq z y) x)  
  4.                             ('t z)))  
  5.                      ('t (cons (subst x y (car z))  
  6.                                (subst x y (cdr z))))))) 

我們簡(jiǎn)記f =(label f (lambda ( ... ) e ))為

(defun f ( ... ) e )

于是

 
 
 
  1. (defun subst (x y z)  
  2.   (cond ((atom z)  
  3.          (cond ((eq z y) x)  
  4.                ('t z)))  
  5.         ('t (cons (subst x y (car z))  
  6.                   (subst x y (cdr z)))))) 

偶然地我們?cè)谶@兒看到如何寫(xiě)cond表達(dá)式的缺省子句. ***個(gè)元素是't的子句總是會(huì)成功的. 于是

 
 
 
  1. (cond (x y ) ('t z ))  

等同于我們?cè)谀承┱Z(yǔ)言中寫(xiě)的

 
 
 
  1. if x then y else z  

對(duì)Lisp函數(shù)的表示便介紹到這里。

【編輯推薦】

  1. Lisp介紹之七個(gè)原始操作符
  2. 細(xì)數(shù)程序開(kāi)發(fā)語(yǔ)言的七大奇跡
  3. Clojure編程語(yǔ)言 擴(kuò)展你的Java想象力
  4. Scala將成為現(xiàn)代Web 2.0的發(fā)起語(yǔ)言
  5. Scala和Clojure,以及優(yōu)秀的企業(yè)級(jí)語(yǔ)言之道

網(wǎng)站名稱:Lisp函數(shù)的表示
轉(zhuǎn)載來(lái)源:http://www.5511xx.com/article/dpdcjph.html