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