2.2.1 數據類型轉換
Scheme提供了許多可以進行數據類型轉換的過程。我們已經知道可以通過char-downcase 和 char-upcase過程來進字符大小寫的轉換。字符還可以通過使用char->integer來轉換成整型,同樣的整型也可以通過integer->char被轉換成字符。(字符轉換成整型得到的結果通常是這個字符的ascii碼值。)
字符串可以被轉換成等價的字符列表。
其它的轉換過程也都是一樣的風格list->string, vector->list 和 list->vector。
字符串也可以轉換成數字。如果字符串不能轉換成數字,則會返回#f。
=>
=>
string->number第二個參數是可選參數,指示以幾進制來轉換。
八進制的數字 16 等於 14。
Symbols也可以轉換爲字符串,反之亦然:
=>
=>
2.1 其它數據類型
Scheme還包含了一些其它數據類型。一個是procedure(過程)。我們已經見過了許多過程了,例如,display, +, cons等。實際上,它們是一些承載了過程值的變量,過程本身內部的數值和字符並不可見:
=>
迄今爲止我們所見過的這些過程都屬於原始過程(系統過程),由一些全局變量來承載它們。用戶還可以添加自定義的過程。
還有另外種數據類型是port端口。一個端口是爲輸入輸出提供執行的通道。端口通常會和文件和控制檯操作相關聯。
在我們的”Hello,World!”程序中,我們使用display過程向控制檯輸出了一個字符串。display可以接受兩個參數,第一個參數值是將輸出的值,另一個值則表示了即將承載顯示結果的輸出port(端口)。
在我們的程序中,display的第二參數是隱式參數。這時候display會採用標準輸出端口作爲它的默認輸出端口。我們可以通過調用current-output-port過程來取得當前的標準輸出端口。我們可以更清楚的寫出
2.2 S-expressions
所有這些已經被討論過的數據類型可以被統一成一種通用的叫作s-expression(符號表達式或s-表達式)的數據類型(s代表符號)。像 42,#\c,(
1 .
2)
, #(
a
b
c)
, "Hello", (
quote
xyz)
, (
string->number
"16")
, 和 (
begin (
display
"Hello, World!") (
newline))
都是s-表達式。