Je voudrais faire une version efficace de l'algorithme LCS en orme. J'aime cette version ocaml mais elle utilise des effets secondaires pour mettre en cache les résultats au fur et à mesure.plus longue sous-séquence commune en orme avec memoization
let lcs xs ys =
let cache = Hashtbl.create 16 in
let rec lcs xs ys =
try Hashtbl.find cache (xs, ys) with
| Not_found ->
let result =
match xs, ys with
| [], _ -> []
| _, [] -> []
| x :: xs, y :: ys when x = y ->
x :: lcs xs ys
| _ :: xs_rest, _ :: ys_rest ->
let a = lcs xs_rest ys in
let b = lcs xs ys_rest in
if (List.length a) > (List.length b) then a else b
in
Hashtbl.add cache (xs, ys) result;
result
in
lcs xs ys
Comment faire si je veux utiliser memoization dans elm?
Même avec la paresse je ne vois toujours pas comment je pourrais passer les valeurs entre les différentes branches des appels récursifs. –