Scheme语言基础之数据类型
Scheme語言是LISP語言的一個方言,是一門小巧的語言,在科學(xué)研究領(lǐng)域有重要的作用,機(jī)器學(xué)習(xí),人工智能都是Scheme派上用場的地方,使用Scheme可以讓程序員不用為了語法而分心,可以專注于程序的算法邏輯上。學(xué)習(xí)Scheme的人應(yīng)該都是從SICP開始的,這本書沒有過多講解Scheme的語法,而是集中介紹Scheme中核心的數(shù)據(jù)結(jié)構(gòu)和如何用Scheme的思想來表達(dá)出自己想要的程序,這方面應(yīng)該另外通過其他途徑獲取。
一下就介紹一下Scheme的基本用法:
Scheme是一門動態(tài)類型的語言,如pyrhon,perl一樣,可以寫成腳本,通常Scheme腳本都是以
#!/usr/local/bin/guile -s
!#
開始,Scheme程序可以在guile下編譯,調(diào)試。
定義變量使用的語法行如
(define 變量名 值)
例如(define x 3)則定義了變量x,綁定到3。而如果想更改x的值可以使用set!,
(set! x 6)
當(dāng)然你不僅可以把其他整數(shù)值賦予x,同樣也可以用有理數(shù),字符,字符串賦值,應(yīng)為Scheme是動態(tài)類型,所以賦值的類型就決定了x的類型。
Scheme的數(shù)據(jù)類型包含了數(shù)學(xué)中的基本類型,因為Scheme是由數(shù)學(xué)家創(chuàng)造的,所以跟數(shù)學(xué)很接近。
boolean類型的:#f和#t,對這個類型的操作只有 not,例如
(not #f) 返回#t
數(shù)字型包括整形,有理型,實數(shù)和復(fù)數(shù),進(jìn)制的表示形式為#x,#o,#b,#d分別為十六進(jìn)制,八進(jìn)制,二進(jìn)制,十進(jìn)制,可以發(fā)現(xiàn)Scheme中大量使用#。
Scheme語言中的字符型數(shù)據(jù)均以符號組合 "#\" 開始,表示單個字符。特殊字符有:#\space 表示空格符和 #\newline 表示換行符。
Scheme中定義了符號變量,以’開始,例如’hello就定義了符號hello,感覺符號變量就像C++中的字符串字面量。對于字符串,則有很多已經(jīng)定義好的過程可以使用,例如string-length返回字符串的長度,string-set!設(shè)置字符,string-ref返回字符的引用,
(fefine str "hello"),(string-length str),(string-set! str 2 #\a),(string-ref str 2),則分別就是取str的長度,設(shè)置第3個字符為a,返回第3個字符的引用。
點對是Scheme中最重要的結(jié)構(gòu)了,也是SCIP中重點介紹的,應(yīng)為由點對可以組合成任意復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。點對由cons定義,如(cons 1 2)則生成(1 , 2),取得和設(shè)置第一個元素的過程是car,set-car!,同理,若操作第二個元素,則使用cdr,set-cdr!.
說了點對后就應(yīng)該說list了,list是用的最多的了,定義列表為(define l (list 1 2 3)),列表由形如string一樣的操作過程,即list-length,list-ref,list-set!.列表是由點對形成的,前面定義的(1 2 3)也可以表達(dá)為(define l (cons 1 (cons 2 (cons 3 '() ))),’()代表NULL。
列表過后就是向量了,定義向量的方式和列表一樣,只需將list換成vector即可,(define v (vector 1 2 3)),表示為#(1 2 3),操作向量的過程也和列表類似。向量的索引也是從0開始的。
有了數(shù)據(jù)結(jié)構(gòu)了,就需要一些過程來輔助數(shù)據(jù)結(jié)構(gòu)的使用,C語言中有if,Scheme中判斷是用類型名加問號再加相應(yīng)的常量或變量構(gòu)成,
(char? #\g)就判斷字符g是否為字符類型。其他類型還有boolean,integer,real,number,rational,symbol,null.
eq?,eqv?和equal?是三個判斷兩個參數(shù)是否相等的過程,其中eq?和eqv?的功能基本是相同的.eq?是判斷兩個參數(shù)是否指向同一個對象,equal?則是判斷兩個對象是否具有相同的結(jié)構(gòu)并且結(jié)構(gòu)中的內(nèi)容是否相同,它用eq?來比較結(jié)構(gòu)中成員的數(shù)量;equal?多用來判斷點對,列表,向量表,字符串等復(fù)合結(jié)構(gòu)數(shù)據(jù)類型。
Scheme中的算術(shù)運算有+ , - , * , / 和 expt (指數(shù)運算),->表明類型轉(zhuǎn)換。
以上都是基本的功能,有了這些基本的功能后就可以取定義復(fù)雜的過程了,過程相當(dāng)于C語言中的函數(shù),不過這里過程和數(shù)據(jù)有一樣的地位,也就是說過程可以做參數(shù),返回值,可以賦值,這也就是Scheme為什么稱為函數(shù)式語言的原因了。
過程可以使用define和lambda來定義,形如(define 過程名 ( lambda (參數(shù) ...) (操作過程 ...)))。例如
(define add5 (lambda (x) (* x 5)))就定義了乘以5的過程。
總結(jié)
以上是生活随笔為你收集整理的Scheme语言基础之数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0.5mm的焊锡丝能吃多大电流_施工要用
- 下一篇: 微型计算机三包_买卖合同与“三包规定”