我对结构的使用有几个问题,gb_tree
例如来自 shell 的基本输入以及在没有 shell 输入的梁可执行文件中使用树。
第一个问题是如何使用函数Tree
返回的init()
?在程序的生命周期内是否Tree
变成全局的?我是否需要将返回的树从外壳传递到add_entry()
例如?
第二个问题与将参数传递给add_entry
函数调用有关,例如gbt:add_entry(x,"10")
但这给了我一个异常错误:
** exception error: no function clause matching gbt:add_entry(x,"y") (gbt.erl, line 23)
我也尝试过使用Tree = gb_trees:enter( value, Data, Tree)
inside ,但后来在未绑定add_entry()
的地方编译时收到错误消息。Tree
我的最后一个问题是如何将记录存储/检索/删除/更新到名为mapping
(在源代码中声明)的 gb_tree 中?
-module(gbt).
-export([init/0,lookup/2,retrieve/2, add_entry/2, delete/2]). % For test purposes only.
-record(mapping, {string="", parameter}).
init() ->
Tree = gb_trees:empty().
lookup( value, Data) ->
case
gb_trees:lookup( value, Data) of
none ->
false ;
_ -> io:format("ok~n")
end.
retrieve( value,Data) ->
case gb_trees:lookup( value, Data) of none ->
false;
{ value, Data} ->
io:format("~w~n", [Data])
end.
add_entry( value, Data) ->
Tree = gb_trees:enter( value, Data, Tree),
io:format("~p ~p ~n", [value,Data]).
delete( value,Data)->
{value, Data} = gb_trees:lookup( value, Data),
Tree = gb_trees:delete( value, Data),
io:format("~w~n", [Data]).
% reserve(Free) ->
% case gb_trees:take_smallest(Free) of
% {Min, Min, Free1} ->
% {Min, Free1};
% {Min, Max, Free1} when Max > Min ->
% {Min, gb_trees:insert(Min+1, Max, Free1)}
% end.