Re: ClearAll error message

*To*: mathgroup at smc.vnet.net*Subject*: [mg92405] Re: ClearAll error message*From*: Szabolcs Horvát <szhorvat at gmail.com>*Date*: Tue, 30 Sep 2008 21:46:51 -0400 (EDT)*Organization*: University of Bergen*References*: <gbnpep$pr3$1@smc.vnet.net> <gbqcv3$ebb$1@smc.vnet.net> <gbt2tq$lgc$1@smc.vnet.net>

carlos at colorado.edu wrote: > Actually this was not a big deal. The group working with the program was > puzzled by the message but soon it was fixed. BTW, one student came > with an elegant one-liner to create a nxn symmetric array: > > S=Table[rootname[Min[i,j],Max[i,j]],{i,n},{j,n}] > > The Clear behavior seems largely a question of esthetics. It is not just a question of esthetics ... In[1]:= Unprotect[Clear] Out[1]= {"Clear"} In[2]:= ClearAttributes[Clear, HoldAll] In[3]:= x = 1 Out[3]= 1 In[4]:= Clear[x] During evaluation of In[4]:= Clear::ssym: 1 is not a symbol or a \ string. >> > One of the basic > rules of functional programming is function composition equivalence: > > y:=f(x); z:=g(y) equiv z:=g(f(x)) > > Since name=Symbol["A"]; ClearAll[name] is not equivalent > to ClearAll[Symbol["A"]] the rule is violated here, and likewise > for any function with HoldAll attribute. Correct? Note that the ClearAll "function" is not really a function. Evaluating it has side effects, but it has no return value, so it violates an even more important principle. A "real" function just takes a value, and returns another value, but nothing special happens just because the return value was computed.