2.2.1 資料類型轉換
Scheme提供了許多可以進行資料類型轉換的過程。我們已經知道可以通過char-downcase 和 char-upcase過程來進字元大小寫轉換。字元還可以通過使用char->integer來轉換成整型,同樣的整型也可以通過integer->char被轉換成字元。(字元轉換成整型得到的結果通常是這個字元的ascii碼值。)
(char->integer#\d) => 100
(integer->char50) => #\2
字串可以被轉換成等價的字元列表。
(string->list"hello") => (#\h#\e#\l#\l#\o)
其它的轉換過程也都是一樣的風格list->string, vector->list 和 list->vector。
數字可以轉換成字串:(number->string16) => "16"
字串也可以轉換成數字。如果字串不能轉換成數字,則會返回#f。
(string->number"16")
=> 16
(string->number"Am I a not number?")
=> #f
string->number第二個參數是選擇性參數,指示以幾進位來轉換。
(string->number"16"8) => 14
八進位的數字 16 等於 14。
Symbols也可以轉換為字串,反之亦然:
(symbol->string'symbol)
=> "symbol"
(string->symbol"string")
=> string
2.1 其它資料類型
Scheme還包含了一些其它資料類型。一個是procedure(過程)。我們已經見過了許多過程了,例如,display, +, cons等。實際上,它們是一些承載了過程值的變數,過程本身內部的數值和字元並不可見:
cons
=> <procedure>
迄今為止我們所見過的這些過程都屬於原始過程(系統過程),由一些全域變數來承載它們。使用者還可以添加自訂的過程。
還有另外種資料類型是port連接埠。一個連接埠是為輸入輸出提供執行的通道。連接埠通常會和檔案和控制台操作相關聯。
在我們的”Hello,World!”程式中,我們使用display過程向控制台輸出了一個字串。display可以接受兩個參數,第一個參數值是將輸出的值,另一個值則表示了即將承載顯示結果的輸出port(連接埠)。
在我們的程式中,display的第二參數是隱式參數。這時候display會採用標準輸出連接埠作為它的預設輸出連接埠。我們可以通過調用current-output-port過程來取得當前的標準輸出連接埠。我們可以更清楚的寫出
(display"Hello, World!" (current-output-port))
2.2 S-expressions
所有這些已經被討論過的資料類型可以被統一成一種通用的叫作s-expression(符號運算式或s-運算式)的資料類型(s代表符號)。像 42,#\c,(1 . 2) , #(ab c) , "Hello", (quote xyz) , (string->number "16"), 和 (begin (display "Hello,
World!") (newline))都是s-運算式。