(*** Board: 盤面のデータ構造と操作 ***) (* マス目の状態 *) type state = Pressed | NotPressed (* 問題となる行・列のあるべき黒マス状態 *) type spec = int list (* 盤面 *) type board = { width : int; height : int; (* 幅と高さ *) h_spec : spec list; v_spec : spec list; (* 問題 *) body : state ref list list; (* マス目の状態 *) } (* マス目の状態が問題の解になっているかのチェック *) val is_solved : h_spec:spec list -> v_spec:spec list -> state ref list list -> bool (* 問題から初期盤面を作る *) val board_of_spec : h_spec:spec list -> v_spec:spec list -> board