本書は工学部専門科目「プログラミング言語処理系」と「計算機科学実験及演習3(ソフトウェア)」のテキストである.プログラミング言語の設計と実装に関わるトピックをカバーしている.
本書では (1) 工学部専門科目「プログラミング入門」と (2) 「言語・オートマトン」の内容を既知とする.実装課題に取り組む場合は特に (3) git の基本的な操作法と (4) OCaml の知識とある程度の実装力が必要である.本講義でも OCaml の復習を少しやる予定であるが,あまり時間をかけることはできないので,以下の問題が解ける程度になるまで各自自習されたい.五十嵐淳による OCaml 入門テキスト が参考になるであろう.
なお,この教科書は五十嵐淳によって書かれた教科書を馬谷誠二と末永幸平が加筆したものである.
本書中の実装課題に取り組む場合,以下の問題を解ける程度の OCaml 力が必要である.
OCamlインタプリタに以下の入力を与えたところ,
# let rec f x = if x = 0 then x else false;;
Error: This expression has type bool but an expression was expected of type int.
という応答が返ってきた.この応答の意味するところを,エラーメッセージ中の This
が何を指すかを明らかにしつつ,説明せよ.
int
型の値n
を受け取り,1+...+n
を返す関数sum
を書け.ただし,n
が0
以下である場合は例外を投げること.例外の宣言もプログラムに含めよ.
int
型の値を保持する二分木を表すユーザ定義型bt
を,ヴァリアント型を用いて定義せよ.bt
型の値t
を受け取り,t
中に現れるすべての値の和を求める関数sumtree
を書け.sumtree
の型はbt -> int
となる.int -> int
型の関数f
とbt
型の値t
とを受け取り,t
中に現れるすべての値にf
を適用して得られる木を求める関数mapTree
を書け.mapTree
の型は(int -> int) -> bt -> bt
となる.本書の演習問題に取り組むためには,OCamlの処理系と,元になるソースコードが必要となる.講義資料中のOCaml の設定に関する部分を参照のこと.