不小心一忙,就錯過了發文時間,但我還是會繼續把內容補完。
Racket 與 Scheme 雖然是很老牌的語言,然而它們對 Unicode 的支援度很高,這意思是說,它在使用 Unicode 內容,或說寬位元字串時,不需要使用特別的字面表示法。
在 Racket 的字串表示很單純,就是雙引號括起來的內容:
(displayln "hello world!")
(displayln "你好!")
此處的 displayln
等同以下效果:
(display "hello world!")
(newline)
(display "你好!")
(newline)
若你有寫過一些文字處理的程式,例如跟 CNS11643 轉碼器奮戰過,會大量接觸 Unicode 編碼。當下,需要直接寫 Unicode 進字串呢?就在 Unicode 編碼前加上 \u
即可:
(displayln "\u4F60\u597D\uFF01")
今年各行各業各有其代表字,Racket 的代表字永遠是 λ
,而 λ
在 DrRacket 裡有其特殊含意,甚至有快速鍵。但這是一個什麼字?它是一個希臘文字母,你無法在鍵盤上直接打出來,因此,除非用 DrRacket 的 ctrl+\
,要打出 λ
最快的就是用它的 Unicode 編碼 \u03BB
。在 Racket 裡,要直接表示單一字元,與其他語言不太一樣,必須用 #\
來表示。如下:
(displayln #\λ)
套用上一節談到的 Unicode 表示法:
(displayln #\u03BB)
這樣,你已經可以在這個語言裡呈現各樣的文字。
當然,只是知道字串如何呈現,一定無法滿足各位頂尖工程師的胃口。我們在此介紹一些簡單的字串小應用,開始熟練 Racket 的函式呼叫吧。
之前提到,PostgreSQL 與 Haskell 字串相接的語法,在 Racket 裡頭怎麼做呢?在 Racket 裡,沒有特殊的語法來對應,要拼接、組合文字,就是直接呼叫:string-append
函式,如下:
(string-append "Hello " "World!") ;; 參數無上限,它會全拼在一起
在這個地方,你或許會以為 Racket 裡,資料與數值是一類,函式又是另一類。本質上不是如此,但我們談函式時會說到。唯切記一件事:參數是用空白分隔。
在往下看之前,你先想想,字串長度的函式應該叫什麼名字?
(string-append "===============" "我是分隔線" "===============")
(string-length "Hello World")
而當我們知道字串長度時,便能來做字串的提取(substring):
(define str "Hello World")
(substring str 1 5) ;; 從 index 1 取 (5 - 1) 個:ello
(substring str 1) ;; 從 index 1 取到結尾:ello World
(define length (string-length str))
(substring str 1 length) ;; 等於上述結果
Racket 提供幾個不同的字串比較函式,在此不會全部介紹,各位可以參考 Racket Guide [1] 的說明。字串相等的比較,可以這麼寫:
(define a "Apple")
(define b "BMW")
(string=? a b) ;; #f
(string=? a "Apple") ;; #t
中斷一天,真是可惜;記得活動規則是中斷一天就GG,若還在報名其間內,還可再報一次重頭再來。
所以有些人當天來不及寫出時,先PO篇充數,達到每日不中斷的最低標準,然後隔日再將內容補完整
呵呵,沒關係,希望內容對讀者能有所幫助,也訓練自己寫技術文的思考能力。