gb_tree
シェルからの基本的な入力や、シェル入力なしでビーム実行可能ファイル内でツリーを使用するなど、構造の使用に関していくつか質問があります。
最初の質問は、関数Tree
によって返されたをどのように使用するかです。プログラムの存続期間中にグローバルになりますかinit()
? たとえばTree
、シェルから返された Tree を渡す必要がありますか?add_entry()
2番目の質問は、次の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)
内部も使用してみましたが、バインドされていない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.