學習軌道
/
Factor
Factor
/
練習
/
字元研究
字元研究

字元研究

學習練習

簡介

Factor 的字元是整數,也就是 Unicode 碼位,所以直接用<、>、=這些數值運算子,就能得到區分大小寫的排序。unicode 詞彙則新增了能辨識 Unicode 的述詞,以及單一字元的大小寫轉換。

字元述詞

LETTER?  ( c -- ? )    ! uppercase letter
letter?  ( c -- ? )    ! lowercase letter
Letter?  ( c -- ? )    ! letter, either case
digit?   ( c -- ? )    ! decimal digit
digit>   ( c -- n )    ! the integer value of a digit char
blank?   ( c -- ? )    ! whitespace
USING: unicode ;

CHAR: A LETTER? .    ! => t
CHAR: a letter? .    ! => t
CHAR: 7 digit?  .    ! => t
CHAR: 7 digit>  .    ! => 7

大小寫轉換

ch>upper 和 ch>lower 會轉換單一字元的大小寫。字串層級的>upper和>lower則會把它們套用到字串中的每個字元。

CHAR: a ch>upper .   ! => 65   (which is CHAR: A)
"Hello" >upper .     ! => "HELLO"

capitalize 會先把整串字串轉成小寫,再把第一個字元轉成大寫,也就是單一詞的標題大小寫:

"hELLO" capitalize .   ! => "Hello"

字元常值

CHAR: A 會解析成A的整數碼位。如果要使用具名字元,可以用space、tab、\n等名稱:

CHAR: A .        ! => 65
CHAR: space .    ! => 32
CHAR: \n .       ! => 10

符號

當一個詞需要回傳標籤而不是值時,例如用yes/no/maybe代替布林值,就把每個標籤宣告成符號。符號是一種在被呼叫時會把自己推入堆疊的詞,而兩個符號只有在名稱相同時才會被視為相等。

USING: kernel ;

SYMBOLS: yes no maybe ;

yes .    ! => yes
yes yes = .    ! => t
yes no = .     ! => f

SYMBOL: name 宣告一個符號;SYMBOLS: a b c ; 則可以一次宣告多個。

說明

Heidi 是一位年輕的 Forth 外星人,她的人類字母表專案還有一些工作要完成,於是請你幫她寫幾個她會用到的字詞。

1. 比較兩個字元

定義compare-chars,接收兩個字元,並根據第一個字元是小於、大於還是等於第二個字元,回傳符號less、greater或equal。比較時請區分大小寫。

CHAR: A CHAR: B compare-chars .   ! => less
CHAR: B CHAR: A compare-chars .   ! => greater
CHAR: A CHAR: A compare-chars .   ! => equal
CHAR: A CHAR: a compare-chars .   ! => less

2. 判斷字元的大小

海蒂需要知道一個字元是「big」(大寫)、「small」(小寫),還是「no-size」(沒有大小)。定義size-of-char回傳big、small或no-size。

CHAR: A size-of-char .       ! => big
CHAR: a size-of-char .       ! => small
CHAR: 5 size-of-char .       ! => no-size
CHAR: space size-of-char .   ! => no-size

3. 改變字元的大小

海蒂有時候需要把字元切成不同的大小。定義change-size-of-char,接收一個字元和想要的大小(big或small),回傳對應大小寫的字元。

CHAR: a big change-size-of-char .     ! => 65   (CHAR: A)
CHAR: A small change-size-of-char .   ! => 97   (CHAR: a)

4. 判斷字元的類型

海蒂還需要知道字元是哪一種類型。定義type-of-char回傳:

  • alpha:任何字母(大寫或小寫)
  • numeric:十進位數字
  • space:空格字元
  • newline:換行字元
  • unknown:其他情況
CHAR: A type-of-char .       ! => alpha
CHAR: 5 type-of-char .       ! => numeric
CHAR: space type-of-char .   ! => space
CHAR: \n type-of-char .      ! => newline
CHAR: ! type-of-char .       ! => unknown
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Factor Exercism

準備好開始 字元研究 了嗎?

註冊 Exercism,透過 47 個概念163 個練習 和真人引導來學習並精通 Factor,全部免費。