資源描述:
《cad編程基礎(chǔ)lisp》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、下載第1章列表處理對那些沒有學(xué)過Lisp語言的人而言,Lisp是一種奇怪的編程語言。在Lisp代碼中到處都是括號。有些人把Lisp這個詞當(dāng)成是“LotsofIsolatedSillyParentheses”(大量分離的愚蠢的括號)的縮寫。但是這種說法是沒有根據(jù)的。Lisp是指“LIStProcessing”(列表處理),和通過把列表放置在括號之間來處理列表(甚至是列表的列表)的編程語言。括號標(biāo)記了列表的邊界。有時一個列表用一個單引號或表示標(biāo)記“,”開頭。列表是Lisp的基礎(chǔ)。1.1Lisp列表在Lisp中,一個列表看起來像這個樣子:'(rosevioletd
2、aisybuttercup)。這個列表以單引號開始。這個列表也可以寫成下面這種你可能比較熟悉的形式:在這個列表中,元素是四種不同的花的名稱,它們之間用空格分隔開,并用括號括起來,就像花在一個用石頭墻圍起來的花園中一樣。列表中也可以有數(shù)字,如列表(+22)一樣。這個列表有一個加號“+”,后接兩個“2”,它們之間用空格分隔開。在Lisp中,數(shù)據(jù)和程序都以同樣的方式表示;也就是說,它們都是由空格分隔的、由括號括起來的單詞、數(shù)字或者其他列表的列表。(因?yàn)槿绻粋€程序看起來像數(shù)據(jù),那它就很容易作為其他程序的數(shù)據(jù);這是Lisp的一個很有用的特性。)(附帶提一下,對前面這
3、對括號而言,它不是Lisp列表,因?yàn)槠渲惺褂昧藰?biāo)點(diǎn)符號“;”和“?!眮矸指舨煌脑亍?下面是另一個列表,這個列表中有另外一個列表:這個列表的元件是單詞“this”、“l(fā)ist”、“has”和內(nèi)部列表“(alistinsideofit)”。內(nèi)部列表由“a”、“l(fā)ist”、“inside”、“of”和“it”幾個詞組成的。1.1.1Lisp原子在Lisp中,我們剛才說到的詞被稱作原子(atom)。這個術(shù)語來自原子一詞的歷史含義,即原子意味著“不可分”。只要提到Lisp,我們在列表中使用的詞就不可以再被分成更小的部分,這在程序中也一樣。數(shù)字、單個字符(如“+”)
4、都是如此。另一方面,不像原子,一個列表可以拆分成不同的部分。(參見第7章,“基本函數(shù):car、cdr和cons”)。在一個列表中,原子是由空格一分隔的。原子可以緊接著括號。2計(jì)計(jì)GNUEmacsLisp編程入門下載從技術(shù)上說,Lisp中的一個列表有三種可能的組成方式:括號和括號中由空格分隔的原子;括號和括號中的其他列表;括號和括號中的其他列表及原子。一個列表可以僅有一個原子或者完全沒有原子。一個沒有任何原子的列表就像這樣:(),它被稱作空列表。與所有的列表都不同的是,可以把一個空列表同時看作既是一個原子,也是一個列表。原子和列表的書面表示都被稱作符號表達(dá)式(
5、symbolicexpression),或者更簡潔地被稱作s-表達(dá)式(s-expression)。表達(dá)式這個詞,既可以指書面的表示,也可以指一個原子或者一個列表在計(jì)算機(jī)中的內(nèi)部表示。人們常常無區(qū)別地使用表達(dá)式這個詞。(同樣地,在許多書中,表格(form)這個詞也被看作是表達(dá)式的同義詞)。順便說一下,構(gòu)成我們的宇宙的原子是在它們被認(rèn)為是不可分的時候命名的。但是,人們已經(jīng)發(fā)現(xiàn),物理上的原子不再是不可分的。原子的一部分可以被分出來,或者可以裂變成大致相等的兩個部分。物理上的原子在它們的更真實(shí)的本質(zhì)被發(fā)現(xiàn)之前就已被過早地命名。在Lisp中,某種類型的原子,例如一個數(shù)
6、組,可以被分成更小的部分,但是分割數(shù)組的機(jī)制與分割列表的機(jī)制是不同的。只要是涉及列表操作,列表中的原子就是不可分的。與英語中一樣,Lisp原子的組成字母的意義與由這些字母構(gòu)成的單詞的含義是不同的。例如,代表“SouthAmericansloth”的單詞“ai”與“a”和“i”這兩個字母是完全不同的。自然界有許多種原子,但是在Lisp中只有幾種原子:例如,數(shù)字(比如“37”、“511”或“1729”)和符號(比如“+”、“foo”和“forward-line”)。以上列出的這些單詞都是符號。在Lisp的日常使用習(xí)慣中,“原子”一詞不太常用,因?yàn)槌绦騿T經(jīng)常試圖更
7、明確地表示他們處理的原子類型。Lisp編程幾乎都是關(guān)于列表中的符號的(且有時是關(guān)于數(shù)字的)。(附帶說明一下,上述3個單詞是Lisp中一個正確的列表,因?yàn)樗氖窃?。在這種情況下,原子是一些由空格分隔、用括號括起來的符號,其中沒有任何對Lisp而言是非法的標(biāo)點(diǎn)符號。)另外,雙引號中的文本—不論是句子或者是段落—都是一個原子。下面是一個這樣的例子:在Lisp中,所有用雙引號括起來的文本,包括標(biāo)點(diǎn)符號和空格,都是單個原子。這種原子被稱作串(string)(代表“字符串”之意),并且它是一種事物的分類,以便讓計(jì)算機(jī)能夠打印出可供閱讀的信息。。字符串是不同于數(shù)字和
8、符號的一種原子,在使用上也是不同的。1.1.2列表中