Re: [Chicken-users] Expanding ellipsis on lists of different length

2008-08-28 Thread Elf

On Thu, 28 Aug 2008, Tobia Conforto wrote:



I believe it's only a matter of using a version of map that checks this 
condition: that all its arguments become '() at the same time.  Maybe it 
would be useful to modify map itself in this way?


;; correct, this is an error
(map list '(1 2 3) '(10 20))
=> Error: (map) lists are not of same length: (())

;; not so correct, this should be an error too
(map list '(1 2) '(10 20 30))
=> ((1 10) (2 20))



this is a problem, because this technically is correct behaviour, if we're
going to allow this (what i consider broken but understand from my betters is 
merely unspecified) behaviour.  it is consuming all of the tokens from the 
list.  yay ambiguity.  i dont think that trying to solve the case in the 
general form by the extra checks would be a good idea because a) most forms 
will be correct in more than an unspecified sense, and b) the vast majority

of forms would get a fairly nasty slowdown in order to error for something
outside the spec.

-elf


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] Expanding ellipsis on lists of different length

2008-08-28 Thread Tobia Conforto

felix winkelmann wrote:
alexpander accepts this form, but gives an error if the lists are of  
unequal length.


I believe this is the correct behaviour.  Chicken gives an error only  
when the first list is longer than the second, not when it's shorter.



Elf wrote:
the untest case is always valid, the test case is only valid when  
input is of the same length.


Yes, that's my point.

i am confused.  are you proposing that it should always signal an  
error when getting the split ellipses like this, or when the lists  
are mismatched? (the second case is a bit unpleasant to try to catch  
all the time, and would probably have performance unplesantnesses.)



It should signal an error when they are mismatched.

I believe it's only a matter of using a version of map that checks  
this condition: that all its arguments become '() at the same time.   
Maybe it would be useful to modify map itself in this way?


;; correct, this is an error
(map list '(1 2 3) '(10 20))
=> Error: (map) lists are not of same length: (())

;; not so correct, this should be an error too
(map list '(1 2) '(10 20 30))
=> ((1 10) (2 20))


Tobia


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] Expanding ellipsis on lists of different length

2008-08-28 Thread felix winkelmann
On Wed, Aug 27, 2008 at 9:02 PM, Elf <[EMAIL PROTECTED]> wrote:
>
> i believe that this is an error in chicken.  there are two ellipses in the
> pattern and only one in the output spec, so in both cases it should error
> with
> an invalid transformer spec notice.  additionally, the 'a' isnt followed by
> an ellipsis, nor is the 'b' followed by an ellipsis, which is specifically
> the error referred to here: 'pattern variables that occur in subpatterns
> followed by one or more instances of the identifier ... are allowed only in
> subtemplates that are followed by as many instances of ... .
> they are replaced in the output by all of the subforms they match in the
> input,
> distributed as indicated.  it is an error if the output cannot be built as
> specified.'
>

BTW, alexpander accepts this form, but gives an error if the lists
are of unequal length.


cheers,
felix


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users