関数型プログラミングに入門した

- OCaml

概要

読み始めたきっかけと目的

学んだこと

紹介

(* 目的 : 受け取った lst の各要素の先頭に n を付け加える *)
(* add_to_each : int  -> int list list -> int list list *)
(* テスト *) 
let test1 = add_to_each 1 [] = [];;
let test2 = add_to_each 1 [[2]] = [[1; 2]];;
let test3 = add_to_each 1 [[2]; [2; 3]] = [[1; 2]; [1; 2; 3]];;
let test4 = add_to_each 1 [[2]; [2; 3]; [2; 3; 4]]
                          = [[1; 2]; [1; 2; 3]; [1; 2; 3; 4]];;
let rec add_to_each n lst = match lst with
    [] -> []
    | first :: rest -> [];;
let rec add_to_each n lst = match lst with
    [] -> []
    | first :: rest ->
        (n :: first) :: (add_to_each n rest) ;;

(* 目的 : 受け取った lst から接頭辞のリストを求める *)
(* add_to_each : int list -> int list list *)
(* テスト *) 
let test5 = prefix [] = [];;
let test6 = prefix [1] = [[1]];;
let test7 = prefix [1; 2] = [[1]; [1; 2]];;
let test8 = prefix [1; 2; 3; 4] 
                   = [[1]; [1; 2]; [1; 2; 3]; [1; 2; 3; 4]];;
let rec prefix lst = match lst with
    [] -> []
    | first :: rest -> [];;
let rec prefix lst = match lst with
    [] -> []
    | first :: rest ->
        (first :: []) :: add_to_each first (prefix rest);;

まとめ

参考