Karim Belabas on Mon, 06 Aug 2012 10:23:23 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: [a<-b,f(a)] |
* Bill Allombert [2012-08-06 01:00]: > Dear PARI developers, > > Some month ago, I have added a syntax extension > [a<-b,f(a)] as a short cut for > [a|a<-b,f(a)]. > > Unfortunately this conflicts with some valid syntax: > ? [a<3] > *** syntax error, unexpected integer, expecting '-': [a<3] > *** ^- > ? [a<-3] > *** syntax error, unexpected ']', expecting ',': [a<-3] > *** ^- > ? [a<3,1] > *** syntax error, unexpected integer, expecting '-': [a<3,1] > *** ^- Slightly problematic but I wouldn't call any of these a useful construct. And all work if one surrounds the problematic 'a < 3' by parentheses (as I would for readability in the 3rd case at the very least). (10:02) gp > a=1 %1 = 1 (10:02) gp > [ (a<3) ] %2 = [1] (10:02) gp > [ (a<-3) ] %3 = [0] (10:03) gp > [ (a<-3), 1] %4 = [0, 1] > The origin of the problem is that '<-' is not a single token because > x<-1 should be normally parsed as x < (-1), and we parse with a single > token of look-ahead. > > Avoiding this problem was a motivation for reserving the single | sign > for comprehension. But there are none in this [a<-b,f(a)] variant. > > So is there an alternative to [a<-b,f(a)] ? One can't suggest some kind of "insertion" operator [ a << b, f(a) ] as that clashes badly with shifts :-) In fact, almost every operator I tried that didn't begin with '<' looked very unnatural, and anything starting with '<' would incur the same problem as above. One exception was [ a := b, f(a) ], but I'm not enthusiastic. One remote possibility would be to get rid of 'filtre' (or let it treat comments only) and make spaces significant, as they always should have been :-(. Then we could have the even more natural [ a in b, f(a) ] which I like very much. I would vote for killing <- entirely in that case, to be replaced by 'in' always: [a | a in b, f(a)] etc. Cheers, K.B. -- Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17 Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50 351, cours de la Liberation http://www.math.u-bordeaux1.fr/~belabas/ F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP] `