練習問題 5.2 ⑧

先頭からn番目までの要素からなる部分リストを取り出す関数 take とn番目までの要素を抜かした部分リストを取り出す関数 drop

(* 練習問題 5.2.8 *)

#use "ex5-2.ml";; (* 関数 downto1 *)

(*
 * 先頭からn番目までの要素からなる部分リストを取り出す関数 take と
 * n番目までの要素を抜かした部分リストを取り出す関数 drop
 *)

let take n l =
    let rec take_inner n l a =
        match l with
    [] -> []
    | v :: rest ->
            if n = 0
            then a
            else
                v :: take_inner (n-1) rest a
    in
    take_inner n l [];;


let ten_to_zero = downto1 10;;

let test1 = take 8 ten_to_zero = [10; 9; 8; 7; 6; 5; 4; 3];;


let rec drop n l =
    match l with
    [] -> []
    | v :: rest ->
            if n = 0
            then
                l
            else
                drop (n-1) rest;;


let test2 = drop 7 ten_to_zero = [3; 2; 1];;