Re: Position different in 5.0 and 5.1?
- To: mathgroup at smc.vnet.net
- Subject: [mg56089] Re: Position different in 5.0 and 5.1?
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Fri, 15 Apr 2005 04:47:30 -0400 (EDT)
- References: <d3lraa$s6b$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
J R Gog wrote: > I've recently upgraded from 5.1 from 5.0 and have found that some of my old > notebooks don't seem to work. I think I have the essence of what I'm utterly > confussed about in this example: > Position[{"asd", "dsa"}, x_ /; (StringTake[x, 1] == "a")] > > What I want is the position of list entries which have first character "a". > In 5.0, this line works. In 5.1, I get an error that StringTake is being fed > a string. > > I can't find any documentation that explains what has changed to have this > effect. I'm sure I've missed something obvious, but if anyone can explain to > me what has changed, it would be very helpful indeed. I know I can do > everything some other way, but I need to know exactly what old stuff I need > to change! > > > > Thanks > > > > Julia Gog > > You can understand what is happening here by running: Position[{"asd", "dsa"}, x_ /; (Print[x]; StringTake[x, 1] == "a")] As you can see, the code attempts to execute StringTake[List,1] and fails as you describe! Presumably StringTake just used to return unevaluated in such cases in earlier versions of Mathematica. The answer is to force the pattern x to only match a string: Position[{"asd", "dsa"}, x_String /; (StringTake[x, 1] == "a")] Regards, David Bailey dbaileyconsultancy.co.uk