院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

2018-09-03から1日間の記事一覧

パターンマッチングとreduce

listを受け取ったときの定石2つ 1,パターンマッチング 先頭のみで処理が完結するとき2,reduce(fold_left) 先頭以外の要素にも同様の処理をする必要があるとき図にしてみると、このreduceの使い方はパターンマッチングを複雑にしただけだね 先頭だけで済む「…

nを指定できる順列

let permutation = (num, lst) => { let rm = (n, l) => List.filter(el => n != el, l); let rec aux = (num, lst, acc) => switch (num) { | 0 => [List.rev(acc)] | _ => lst |> List.fold_left( (acc2, el) => acc2 @ aux(num - 1, rm(el, lst), [el, ..…

深さ優先探索 改良

意味がわかりやすいように若干改良 let depth_first_search = (start, goal) => { /* auxは 通ってきた道のり:list(int) と 現在地:int を受け取る */ let rec aux = (curPos, pathList) => switch (curPos == goal) { | true => [List.rev([curPos, ...path…

深さ優先探索

お気楽 OCaml プログラミング入門 let adjacent = [ [1, 2], /* A */ [0, 2, 3], /* B */ [0, 1, 4], /* C */ [1, 4, 5], /* D */ [2, 3, 6], /* E */ [3], /* F */ [1] /* G */ ]; let depth_first_search = (start, goal) => { let rec aux = pathList => …

パイプライン演算子

ocamlにはパイプライン演算子があって、これを使うとメソッドぽく扱える let test = [1, 2, 3, 4] |> List.map(x => x * 2) /* [2,4,6,8] */ |> List.filter(x => x mod 3 == 0); /* [6] */ let ( |> ) x f = f x ocaml的にはこういうことらしい。 これもカ…

ReasonMl 次の目標

バックトラック法を使っていろいろやる 99 problemsを解いてみる

8クイーン問題 できた!!

やっと8クイーン問題ができた(たぶん) /* lstの要素すべてがfを満たせばtrue */ /* isSafeでクイーンチェックに使用 */ let rec all = (f, lst) => switch (lst) { | [] => true | [_, ...rest] => f(lst) == true ? all(f, rest) : false }; /* リストを…