プログラミング言語 Standard ML 入門 (問題の解答例)
12.1 ライブラリの種類とそのシグネチャの表示法
問 12.1
Math ストラクチャを利用して, 対数関数の底を変換する関数
val convBase : (real -> real) -> real -> real -> real
を定義せよ.たとえば,
- val log2 = convBase Math.log10 2.0;
val log2 = fn : real -> real
- log2 1024.0;
10.0 : real
のように動作する.
解答例
fun convBase (f:real -> real) b x = f x / f b
問 12.2
よく使用するモジュールのシグネチャをプリントしておくと,モジュー ルの参照カードの役割を果たし,便利である. 第I部で概説した bool, char, int, list, real, string の各データ型の機能は,それぞれ Bool, Char, Int, List, Real, String の各ストラクチャで実現されている. これらストラクチャのシグネチャをプリントし,参照カードを作成せよ.
解答例 例えば、SML#の対話型環境で、 BoolおよびCharを structure Bool = Bool; structure Char = Char; のように再定義することによって、以下のような出力が 得られる。
# structure Bool = Bool; structure Bool = struct datatype bool = false | true val not = fn : bool -> bool val toString = fn : bool -> string val scan = fn : [’a. (’a -> (char * ’a) option) -> ’a -> (bool * ’a) option] val fromString = fn : string -> bool option end # structure Char = Char; structure Char = struct type char = char type string = string val minChar = #"\^@" : char val maxChar = #"\255" : char val maxOrd = 255 : int val ord = <builtin> : char -> int val chr = <builtin> : int -> char val succ = fn : char -> char val pred = fn : char -> char val compare = fn : char * char -> order val < = <builtin> : char * char -> bool val <= = <builtin> : char * char -> bool val > = <builtin> : char * char -> bool val >= = <builtin> : char * char -> bool val contains = fn : string -> char -> bool val notContains = fn : string -> char -> bool val isAscii = fn : char -> bool val toLower = fn : char -> char val toUpper = fn : char -> char val isAlpha = fn : char -> bool val isAlphaNum = fn : char -> bool val isCntrl = fn : char -> bool val isDigit = fn : char -> bool val isGraph = fn : char -> bool val isHexDigit = fn : char -> bool val isLower = fn : char -> bool val isPrint = fn : char -> bool val isSpace = fn : char -> bool val isPunct = fn : char -> bool val isUpper = fn : char -> bool val toString = fn : char -> string val toRawString = fn : char -> string val scan = fn : [’a. (’a -> (char * ’a) option) -> ’a -> (char * ’a) option] val fromString = fn : string -> char option val toCString = fn : char -> string val fromCString = fn : string -> char option end