深さ優先探索 改良
意味がわかりやすいように若干改良
let depth_first_search = (start, goal) => { /* auxは 通ってきた道のり:list(int) と 現在地:int を受け取る */ let rec aux = (curPos, pathList) => switch (curPos == goal) { | true => [List.rev([curPos, ...pathList])] | _ => curPos |> List.nth(adjacent) /* 現在地からつながっているとこ取り出す */ |> List.fold_left( /* それぞれについて探索 & 合成して返す */ (acc, el) => List.mem(el, pathList) ? acc : acc @ aux(el, [curPos, ...pathList]), [], ) }; aux(start,[]); };