Итак, у меня есть задание для школы, которое требует от меня (помимо всего прочего) создания дерева, чтобы использовать его для хранения некоторых чисел и времени использования каждого пути. Например, если я вставлю «1234», а затем «1255», узлы 1 и 2 должны иметь значение = 2, тогда как узлы 3 и 4 должны иметь значение = 1.
Проблема в том, что я не знаю, как реализовать такой трюк в Прологе (я довольно новичок).
Я нашел этот код здесь :
:- use_module(library(lists)).
new_trie(root-[]).
%%% Add a string to the trie.
% We have reached a word ending, so this must be a terminal node.
extend_trie([], TrieIn, TrieOut) :-
ensure_terminal(TrieIn, TrieOut).
% If we have a node for C here, we need to extend it with Cs.
extend_trie([C | Cs], Char-Children, Char-[NewChild | OtherChildren]) :-
select(C-CChildren, Children, OtherChildren),
!,
extend_trie(Cs, C-CChildren, NewChild).
% There is no C node, so we need to construct a new one.
extend_trie([C | Cs], Char-Children, Char-[NewChild | Children]) :-
extend_trie(Cs, C-[], NewChild).
% A terminal node is one with the 'terminal' child.
ensure_terminal(Char-Children, Char-Children) :-
member(terminal, Children),
!.
ensure_terminal(Char-Children, Char-[terminal | Children]).
%%% ----------------------------------------------------------------------
%%% Decide whether or not a word occupies the trie.
%%% ----------------------------------------------------------------------
% If we've got to the end of our string, it is a word if there is a terminal child.
lookup_trie([], _Char-Children) :-
member(terminal, Children).
% If we have more characters in our string, lookup the C trie and continue.
lookup_trie([C | Cs], _Char-Children) :-
member(C-GrandChildren, Children),
lookup_trie(Cs, C-GrandChildren).
Но я не знаю, как это использовать. Я имею в виду, что я не знаю, как создать дерево с этим или вставить / посмотреть значения.
Любая помощь или совет?