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]
`