Re: Mathematicas simplifications
- To: mathgroup at smc.vnet.net
- Subject: [mg96326] Re: Mathematicas simplifications
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 11 Feb 2009 05:24:38 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <gmrmfk$a0f$1@smc.vnet.net>
In article <gmrmfk$a0f$1 at smc.vnet.net>, Kilian Kilger <kilian at nihilnovi.de> wrote: > if I type in Mathematica 7 for example > > Select[Divisors[n],SquareFreeQ] > > It gives me > > Divisors[n] > > as a response, which is wrong. If I type > > f[n_] := Select[Divisors[n],SquareFreeQ] > > and then > > f[4] > > it gives me > > {1,2} > > which is correct. If I type (afterwards) > > f[n] > > again the wrong answer "Divisors[n]" is shown. What am I doing wrong? Same > happens in many other circumstances. The result you obtain might be surprising; it is not wrong however, though the documentation for Select is misleading somehow. It reads: "Select[list, crit] picks out all elements e_i of list for which crit[e_i] is True." Indeed, there is no need for the first argument to be a list. The first argument can be any *non-atomic* expression, that is 'n' will generate an error whereas 'n[]' will not. 'n' alone is a *symbol*, i.e. an atom that cannot be decomposed further, while 'n[]' is an *expression* with head 'n' and no arguments []. The situation is similar for SquareFree[expr], which "gives True if expr is a square-free polynomial or number, and False otherwise," but at least it is clear (at least for experienced users) that 'expr' can be any valid Mathematica expression. Arguably, the documentation for Select[] should have read Select[expr, crit] to give a clue that expressions are accepted, not just lists (which are just a subset of all possible Mathematica expresssions). Also, keep in mind that Mathematica works on symbolic expressions as string of tokens and do not attempt to add any mathematical meaning to them. I hope that the above comment has shed some light on the issue. Here is an illustration of the main points: In[1]:= SquareFreeQ[Divisors[n]] Out[1]= True In[2]:= Select[Divisors[n], SquareFreeQ] Out[2]= Divisors[n] In[3]:= Select[n, SquareFreeQ] During evaluation of In[3]:= Select::normal: Nonatomic expression \ expected at position 1 in Select[n,SquareFreeQ]. >> Out[3]= Select[n, SquareFreeQ] In[4]:= Select[n[], SquareFreeQ] Out[4]= n[] Regards, --Jean-Marc