プログラミング言語 Standard ML 入門 (問題の解答例)
12 基本ライブラリの利用法

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部で概説した boolcharintlistrealstring の各データ型の機能は,それぞれ BoolCharIntListRealString の各ストラクチャで実現されている. これらストラクチャのシグネチャをプリントし,参照カードを作成せよ.

解答例  例えば、SML#の対話型環境で、 BoolおよびCharstructure 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