Re: Why does the order of down values come back?

*To*: mathgroup at smc.vnet.net*Subject*: [mg124819] Re: Why does the order of down values come back?*From*: Leonid Shifrin <lshifr at gmail.com>*Date*: Wed, 8 Feb 2012 05:30:28 -0500 (EST)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <jgo0e9$a2k$1@smc.vnet.net>

A more precise statement would be that DownValues with Sort->False do not perform additional sorting, and presumably expose the content of the rules just as they are kept in the underlying hash-table. This does not however mean that they will come in the order they were entered - since generally hash-table (at least the one used to implement DownValues) does not guarantee you that. This happens to be true for a small number of key-value pairs, but not in general. Try, for example, this: f[x_] := f[x] = x; f /@ Range[100] and then inspect the DownValues of f. Here is one relevant discussion I am aware of: http://stackoverflow.com/questions/7062268/what-sort-option-of-values-does/7063143#7063143 Cheers, Leonid On Tue, Feb 7, 2012 at 12:05 PM, Oleksandr Rasputinov < oleksandr_rasputinov at ymail.com> wrote: > On Mon, 06 Feb 2012 07:45:13 -0000, Shizu <slivo.vitz at msa.hinet.net> > wrote: > > > In[]:= f[0] := 0;f[1] := 1;f[n_] := f[n - 1] + f[n - 2] > > > > In[]:= DownValues[f] > > Out[]:= {HoldPattern[f[0]] :> 0, HoldPattern[f[1]] :> 1, > > HoldPattern[f[n_]] :> f[n - 1] + f[n - 2]} > > > > In[]:= DownValues[f] = Reverse[DownValues[f]] > > Out[]:= {HoldPattern[f[n_]] :> f[n - 1] + f[n - 2], HoldPattern[f[1]] :> > > 1, HoldPattern[f[0]] :> 0} > > > > In[]:= DownValues[f] > > Out[]:= {HoldPattern[f[0]] :> 0, HoldPattern[f[1]] :> 1, > > HoldPattern[f[n_]] :> f[n - 1] + f[n - 2]} > > > > ==================================================== > > My question is: > > > > Why does the order of down values comes back after reordering? > > > > Thanks. > > > > Because DownValues sorts its output by default. The actual downvalues are > not, however, sorted; the order is as you set them. To see their actual > order, use the (undocumented) option: > > DownValues[f, Sort -> False] > >