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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Lisp介紹之七個原始操作符

本文是paul graham所著的《Lisp之根源》的第一部分,在對Lisp的介紹中,描述了Lisp中的七個原始操作符。這是一篇非常不錯的Lisp介紹文,值得一讀。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的梨林網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

約翰麥卡錫于1960年發(fā)表了一篇非凡的論文,他在這篇論文中對編程的貢獻(xiàn)有如歐幾里德對幾何的貢獻(xiàn).1 他向我們展示了,在只給定幾個簡單的操作符和一個表示函數(shù)的記號的基礎(chǔ)上, 如何構(gòu)造出一個完整的編程語言. 麥卡錫稱這種語言為Lisp, 意為List Processing, 因為他的主要思想之一是用一種簡單的數(shù)據(jù)結(jié)構(gòu)表(list)來代表代碼和數(shù)據(jù).

值得注意的是,麥卡錫所作的發(fā)現(xiàn),不僅是計算機史上劃時代的大事, 而且是一種在我們這個時代編程越來越趨向的模式.我認(rèn)為目前為止只有兩種真正干凈利落, 始終如一的編程模式:C語言模式和Lisp語言模式.此二者就象兩座高地, 在它們中間是尤如沼澤的低地.隨著計算機變得越來越強大,新開發(fā)的語言一直在堅定地趨向于Lisp模式. 二十年來,開發(fā)新編程語言的一個流行的秘決是,取C語言的計算模式,逐漸地往上加Lisp模式的特性,例如運行時類型和無用單元收集.

在這篇文章中我盡可能用最簡單的術(shù)語來解釋約翰麥卡錫所做的發(fā)現(xiàn). 關(guān)鍵是我們不僅要學(xué)習(xí)某個人四十年前得出的有趣理論結(jié)果, 而且展示編程語言的發(fā)展方向. Lisp的不同尋常之處--也就是它優(yōu)質(zhì)的定義--是它能夠自己來編寫自己. 為了理解約翰麥卡錫所表述的這個特點,我們將追溯他的步伐,并將他的數(shù)學(xué)標(biāo)記轉(zhuǎn)換成能夠運行的Common Lisp代碼.

七個原始操作符

開始我們先定義表達(dá)式 .表達(dá)式或是一個原子 (atom),它是一個字母序列(如 foo),或是一個由零個或多個表達(dá)式組成的表 (list), 表達(dá)式之間用空格分開, 放入一對括號中. 以下是一些表達(dá)式:

 
 
 
  1. foo
  2. ()
  3. (foo)
  4. (foo bar)
  5. (a b (c) d)

最后一個表達(dá)式是由四個元素組成的表, 第三個元素本身是由一個元素組成的表.

在算術(shù)中表達(dá)式 1 + 1 得出值2. 正確的Lisp表達(dá)式也有值. 如果表達(dá)式e 得出值v ,我們說e 返回 v . 下一步我們將定義幾種表達(dá)式以及它們的返回值.

如果一個表達(dá)式是表,我們稱第一個元素為操作符 ,其余的元素為自變量 .我們將定義七個原始(從公理的意義上說)操作符: quote,atom,eq,car,cdr,cons,和 cond.

(quote x ) 返回x .為了可讀性我們把(quote x )簡記 為'x . Lisp代碼

 
 
 
  1. > (quote a)
  2. a
  3. > 'a
  4. a
  5. > (quote (a b c))
  6. (a b c)

(atom x )返回原子t如果x 的值是一個原子或是空表,否則返回(). 在Lisp中我們按慣例用原子t表示真, 而用空表表示假. Lisp代碼

 
 
 
  1. > (atom 'a)
  2. t
  3. > (atom '(a b c))
  4. ()
  5. > (atom '())
  6. t

既然有了一個自變量需要求值的操作符, 我們可以看一下quote的作用. 通過引用(quote)一個表,我們避免它被求值. 一個未被引用的表作為自變量傳給象 atom這樣的操作符將被視為代碼:

 
 
 
  1. > (atom (atom 'a))
  2. t

反之一個被引用的表僅被視為表, 在此例中就是有兩個元素的表:

 
 
 
  1. > (atom '(atom 'a))
  2. ()

這與我們在英語中使用引號的方式一致. Cambridge(劍橋)是一個位于麻薩諸塞州有90000人口的城鎮(zhèn). 而``Cambridge''是一個由9個字母組成的單詞.

引用看上去可能有點奇怪因為極少有其它語言有類似的概念. 它和Lisp最與眾不同的特征緊密聯(lián)系:代碼和數(shù)據(jù)由相同的數(shù)據(jù)結(jié)構(gòu)構(gòu)成, 而我們用quote操作符來區(qū)分它們.

(eq x y )返回t如果x 和y 的值是同一個原子或都是空表, 否則返回(). Lisp代碼

 
 
 
  1. > (eq 'a 'a)
  2. t
  3. > (eq 'a 'b)
  4. ()
  5. > (eq '() '())
  6. t

(car x )期望x 的值是一個表并且返回x 的第一個元素. Lisp代碼

 
 
 
  1. > (car '(a b c))
  2. a

(cdr x )期望x 的值是一個表并且返回x 的第一個元素之后的所有元素.

 
 
 
  1. > (cdr '(a b c))
  2. (b c)

(cons x y )期望y 的值是一個表并且返回一個新表,它的第一個元素是x 的值, 后面跟著y 的值的各個元素. Lisp代碼

 
 
 
  1. > (cons 'a '(b c))
  2. (a b c)
  3. > (cons 'a (cons 'b (cons 'c '())))
  4. (a b c)
  5. > (car (cons 'a '(b c)))
  6. a
  7. > (cdr (cons 'a '(b c)))
  8. (b c)

(cond ( ... ) ...( ... )) 的求值規(guī)則如下. p 表達(dá)式依次求值直到有一個返回t. 如果能找到這樣的p 表達(dá)式,相應(yīng)的e 表達(dá)式的值作為整個cond表達(dá)式的返回值.

 
 
 
  1. > (cond ((eq 'a 'b) 'first)
  2.         ((atom 'a)  'second))
  3. second

當(dāng)表達(dá)式以七個原始操作符中的五個開頭時,它的自變量總是要求值的.2 我們稱這樣 的操作符為函數(shù) .

以上就是Lisp介紹中有關(guān)其他原始操作符的描述。


網(wǎng)頁名稱:Lisp介紹之七個原始操作符
標(biāo)題URL:http://www.5511xx.com/article/djogess.html