プログラミング言語 Standard ML 入門 (問題の解答例)
4.5 文字型(eqtype char)
問 4.3
ASCII文字表現では ord #"a" ord #"b" ord #"z" かつ ord #"0" ord #"1" ord #"9" かつ ord #"A" ord #"B" ord #"Z" である. この事実のみを仮定して,字句解析処理などでよく使用する以下の各関数 を定義せよ.
-
•
isSpace : char -> bool
文字がスペース文字(空白,改行文字,タブ,垂直タブ,フォームフィード)か 否か判定する関数. -
•
isAlpha : char -> bool
文字が英字か否かを判定する関数. -
•
isNum : char -> bool
文字が数字か否かを判定する関数. -
•
isAlphaNumeric : char -> bool
文字が英字または数字か否かを判定する関数. -
•
isLower : char -> bool
文字が英小文字か否かを判定する関数. -
•
isUpper : char -> bool
文字が英大文字か否かを判定する関数. -
•
toLower : char -> char
文字が英大文字なら英小文字に変換し,それ以外ならその文字をそのまま返す 関数. -
•
toUpper : char -> char
文字が英小文字なら英大文字に変換し,それ以外ならその文字をそのまま返す 関数.
解答例 コード例を以下の示す。
fun isSpace c = case c of #" " => true | #"\t" => true | #"\n" => true | #"\v" => true | #"\f" => true | _ => false fun isAlpha c = c >= #"a" andalso c <= #"z" orelse c >= #"A" andalso c <= #"Z" fun isNum c = c >= #"0" andalso c <= #"9" fun isAlphaNumeric c = isAlpha c orelse isNum c fun isLower c = #"a" <= c andalso c <= #"z" fun isUpper c = #"A" <= c andalso c <= #"Z" fun toLower c = if isUpper c then chr (ord #"a" + (ord c - ord #"A")) else c fun toUpper c = if isLower c then chr (ord #"A" + (ord c - ord #"a")) else c