[erlang-questions] the semantics of dict:append/3

Ulf Wiger (TN/EAB) <>
Sun Sep 17 13:48:15 CEST 2006


During a recent QuickCheck course, one of our guys (Johan Tjäder) started playing with applying QuickCheck to the dict.erl module. The following behaviour came as a surprise:

1> D0 = dict:new().
{dict,0,
      16,
      16,
      8,
      80,
      48,
      {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
      {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}}
2> D1 = dict:append(a, 1, D0).
{dict,1,
      16,
      16,
      8,
      80,
      48,
      {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
      {{[],[[a,1]],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}}
3> dict:find(a,D1).
{ok,[1]}


The documentation has this to say about dict:append/3:

  "This function appends a new Value to the current list
   of values associated with Key. An exception is generated
   if the initial value associated with Key is not a list
   of values."

(http://www.erlang.org/doc/doc-5.5.1/lib/stdlib-1.14.1/doc/html/dict.html#append/3)

I would have thought that the initial value associated
with a key not present in the dictionary is undefined -
not the empty list. Shouldn't then the above experiment
result in a badarg?

BR,
Ulf Wiger




More information about the erlang-questions mailing list