与えられたリストからバイナリツリーを復元する関数を書きたいと思いますload: 'a option list -> 'a tree
。このリストには、接尾辞の順序で要素が含まれています。リストがツリーを表していない場合、関数は例外Loadを発生させる必要があります(事前に宣言する必要があります)。
ツリーは次のように定義されます:
type ‘a btree = L of ‘a | N of ‘a btree * ‘a btree
これまでのところ、私がしたことは:
exception Load ;;
let rec load l =
match l with
| [] -> raise Load
| Some x::_ -> L x
| None::t -> N(?,load t)
;;
入力リストの例を次に示します。
[Some 2; Some 0; None; Some 5; Some 9; Some 20; None; None; None]
それを行う方法はちょっとトリッキーです。リストは接尾辞順なので、List.foldright
関数を使ったほうがいいのかな?