iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
1
Software Development

每天 Racket 3 分鐘系列 第 5

(define day-04 ""Hello world!" 怎麼這時候才出現!— Racket 的字串型態")

不小心一忙,就錯過了發文時間,但我還是會繼續把內容補完。

1. 文字不簡單

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")

2. 2017 年年度代表字

今年各行各業各有其代表字,Racket 的代表字永遠是 λ,而 λ 在 DrRacket 裡有其特殊含意,甚至有快速鍵。但這是一個什麼字?它是一個希臘文字母,你無法在鍵盤上直接打出來,因此,除非用 DrRacket 的 ctrl+\,要打出 λ 最快的就是用它的 Unicode 編碼 \u03BB。在 Racket 裡,要直接表示單一字元,與其他語言不太一樣,必須用 #\ 來表示。如下:

(displayln #\λ)

套用上一節談到的 Unicode 表示法:

(displayln #\u03BB)

這樣,你已經可以在這個語言裡呈現各樣的文字。

3. 一些小應用

當然,只是知道字串如何呈現,一定無法滿足各位頂尖工程師的胃口。我們在此介紹一些簡單的字串小應用,開始熟練 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

上一篇
(define day-0.30000000000000004 (+ 0.1 0.2)) ;; Racket 的數值系統
下一篇
(if day-05 "來杯咖啡談是非 — Racket 的其他型態" (void))
系列文
每天 Racket 3 分鐘17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
逮丸逮丸
iT邦大師 1 級 ‧ 2017-12-09 10:09:50

中斷一天,真是可惜;記得活動規則是中斷一天就GG,若還在報名其間內,還可再報一次重頭再來。
所以有些人當天來不及寫出時,先PO篇充數,達到每日不中斷的最低標準,然後隔日再將內容補完整

呵呵,沒關係,希望內容對讀者能有所幫助,也訓練自己寫技術文的思考能力。

我要留言

立即登入留言