Три реализации в Прологе? - PullRequest
2 голосов
/ 07 июня 2019

Итак, у меня есть задание для школы, которое требует от меня (помимо всего прочего) создания дерева, чтобы использовать его для хранения некоторых чисел и времени использования каждого пути. Например, если я вставлю «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). 

Но я не знаю, как это использовать. Я имею в виду, что я не знаю, как создать дерево с этим или вставить / посмотреть значения.

Любая помощь или совет?

...