Я пытаюсь построить начальную структуру Trie в OCaml, где ребра - это символ.Таким образом, строка «ESK» будет отображаться как:
[('E', [('S', [('K', [])])])]
Мое определение для этого:
type trie = Trie of (char * trie) list
Однако, при реализации функции add
с:
let rec add_string str =
let key = String.get str 0 in
if String.length str = 1 then
(key, empty_trie) :: []
else
(key, add_string (tail str)) :: []
для add (tail str)
компилятор дает мне:
Error: This expression has type (char * trie) list
but an expression was expected of type trie
Я немного озадачен этим, поскольку я не определил trie
как (char * trie) list
?
tail
это просто let tail str = String.slice str 1 (String.length str)
и empty_trie
это let empty_trie = Trie([])