OCaml Начинающий здесь.Вставка в Trie с OCaml Функциональное программирование
У меня есть с подписью синтаксического дерева
type ('k, 'v) trie = Trie of 'v option * (('k * ('k, 'v) trie) list)
Мне нужен способ вставки ниже, но я невежествен. Каков наилучший подход к реализации этого с OCaml (стандартные библиотеки в порядке)? Должен ли я переписывать три или массив внутри? Если это так, как я это делаю с OCaml ?:
val insert : ('k, 'v) trie -> 'k list -> 'v -> ('k, 'v) trie
insert t ks v returns a new trie that is the same as t, but ks is mapped to v.
Вот примеры попыток с отображениями:
(* maps ['a'] to 1 *)
Trie (None, ['a', Trie (Some 1, [])])
(* maps [] to 1, ['a'] to 2, ['a'; 'b'] to 3 and ['a'; 'c'] to 4 *)
Trie (Some 1, ['a', Trie (Some 2, ['b', Trie (Some 3, []); 'c', Trie (Some 4, [])])])
Благодарим за отличную реакцию. Поскольку trie может иметь или не иметь сопоставление для определенного ключа (в списке), я теряюсь на том, как сделать это чисто. Я считаю, что мне нужно сначала проверить, существует ли сопоставление, а затем добавить новый и сделать рекурсивный вызов этого нового. Однако в OCaml это очень плохо делает, и я не уверен, что даже можно просто добавить отображение (поскольку это не OO). – 74Fer
(Я обновил свой ответ, может быть, он что-то прояснит). –