成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Lisp函數的表示

開發 開發工具
Lisp函數相對其他語言來說,表示方法有一些不同。本文是paul graham所著的《Lisp之根源》的第二部分,介紹了Lisp函數的表示。

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

函數的表示

接著我們定義一個記號來描述函數.函數表示為(lambda ( ... ) e ),其中  ... 是原子(叫做參數 ),e 是表達式. 如果表達式的***個元素形式如上

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

則稱為函數調用 .它的值計算如下.每一個表達式 先求值,然后e 再求值.在e 的求值過程中,每個出現在e 中的 的值是相應的 在最近一次的函數調用中的值.

  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) 

如果一個表達式的***個元素f 是原子且f 不是原始操作符

  1. (f  ... )  

并且f 的值是一個函數(lambda ( ... )),則以上表達式的值就是

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

的值. 換句話說,參數在表達式中不但可以作為自變量也可以作為操作符使用:

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

有另外一個函數記號使得函數能提及它本身,這樣我們就能方便地定義遞歸函數.3 記號

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

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

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

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

我們可以這樣表示此函數

  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))))))) 

我們簡記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)))))) 

偶然地我們在這兒看到如何寫cond表達式的缺省子句. ***個元素是't的子句總是會成功的. 于是

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

等同于我們在某些語言中寫的

  1. if x then y else z  

對Lisp函數的表示便介紹到這里。

【編輯推薦】

  1. Lisp介紹之七個原始操作符
  2. 細數程序開發語言的七大奇跡
  3. Clojure編程語言 擴展你的Java想象力
  4. Scala將成為現代Web 2.0的發起語言
  5. Scala和Clojure,以及優秀的企業級語言之道
責任編輯:yangsai 來源: Freeshell
相關推薦

2013-03-29 10:13:22

lisp編譯器

2017-03-16 09:30:56

LispAI數據結構

2012-06-04 10:34:17

Lisp

2012-11-22 10:11:16

LispLisp教程

2014-12-24 13:53:48

2018-11-21 09:33:01

2011-05-19 08:19:50

Lisp

2017-01-05 13:31:33

Lisp加法運算

2012-12-07 10:15:45

2011-04-15 09:23:33

IETFLISP路由器

2010-10-15 10:35:18

2013-03-18 09:30:18

Lisp

2011-10-14 09:20:48

Lisp

2010-03-16 10:13:55

python操作函數

2010-10-13 11:44:47

MySQL數據目錄

2017-04-06 18:34:16

人工智能

2014-09-25 11:08:17

ECLLispC語言

2020-12-07 18:19:46

Common Lisp方言編程

2023-04-06 09:42:00

LispHTMLQwit

2009-09-03 18:12:14

Lisp介紹
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产免费av在线 | 国产免费看 | 色综合色综合 | 日韩一区二区成人 | 日韩精品一区二区三区中文字幕 | 国产专区免费 | 新超碰97 | 亚洲欧美在线观看 | 国产精品久久a | 成人免费在线视频 | 成人免费视频网 | 黄色一级电影在线观看 | 免费国产一区二区视频 | 中文字幕乱码一区二区三区 | 中文字幕日韩在线 | 一级看片免费视频囗交动图 | 久久蜜桃av一区二区天堂 | 国产999精品久久久 午夜天堂精品久久久久 | 日本不卡免费新一二三区 | 丁香一区二区 | 亚洲成人一区二区 | 免费国产一区二区 | 成人av免费在线观看 | www.久久.com | aa级毛片毛片免费观看久 | 亚洲高清在线观看 | 欧美第一页 | 国产精品一区二 | 日本一区二区三区在线观看 | 日韩一区二区三区四区五区 | 欧美精品久久 | 久久久久国产一区二区三区四区 | 日韩在线精品视频 | 日日淫 | 久久久久香蕉视频 | 中文字幕一级 | 欧美一区二区三区在线 | m豆传媒在线链接观看 | 亚洲精品自在在线观看 | 欧美精品区 | 免费看国产片在线观看 |