|
The ". $" notation (was: Re: how useful are collecting lists?)
Alan Manuel Gloria
(18 Mar 2013 01:26 UTC)
|
|
Re: The ". $" notation
Shiro Kawai
(18 Mar 2013 02:42 UTC)
|
|
Re: The ". $" notation Alan Manuel Gloria (18 Mar 2013 02:44 UTC)
|
|
Re: The ". $" notation
Shiro Kawai
(18 Mar 2013 04:45 UTC)
|
|
Re: The ". $" notation
David A. Wheeler
(18 Mar 2013 16:25 UTC)
|
|
Re: The ". $" notation
Alan Manuel Gloria
(19 Mar 2013 00:17 UTC)
|
|
Re: The ". $" notation
David A. Wheeler
(19 Mar 2013 03:28 UTC)
|
|
Re: The ". $" notation
Alan Manuel Gloria
(19 Mar 2013 05:52 UTC)
|
|
Re: The ". $" notation
David A. Wheeler
(19 Mar 2013 10:44 UTC)
|
|
Handling scomments after "."
David A. Wheeler
(19 Mar 2013 03:41 UTC)
|
|
Re: Handling scomments after "."
David A. Wheeler
(19 Mar 2013 04:12 UTC)
|
|
Re: The ". $" notation (was: Re: how useful are collecting lists?)
David A. Wheeler
(18 Mar 2013 03:09 UTC)
|
On 3/18/13, Shiro Kawai <xxxxxx@lava.net> wrote:
> From: Alan Manuel Gloria <xxxxxx@gmail.com>
> Subject: The ". $" notation (was: Re: how useful are collecting lists?)
> Date: Mon, 18 Mar 2013 09:26:04 +0800
>
>> 1. Allow "foo . EOL INDENT x ..." ==> "(foo . (x ...))"
>> 2. Allow "foo . $ x ..." ==> "(foo x ...)"
>
> Is the latter "foo . $ x y ..." ==> "(foo x y ...)"?
> Because "$" is a valid R5RS identifier, we need to
> parse "foo . $ EOL" as a cons of 'foo and '$, correct?
>
> I'm a bit concerned that it might be confusing that:
>
> foo . ($ a b c)
>
> is
>
> foo .
> $ a b c
Uhm, no.
"$" has a different meaning in an indentation context vs. a
non-indentation context.
Inside () [] {}, it is *not* in indentation context and thus "$" is
the symbol (string->symbol "$")
Outside of *explicit* () [] {}, $ means SUBLIST, which has a specific
semantic meaning. See:
http://srfi.schemers.org/srfi-110/srfi-110.html#sublist
So:
foo . ($ a b c) ==> (foo . ($ a b c)) ==> (foo $ a b c)
and:
foo .
$ a b c
==>
foo .
((a b c))
==>
(foo .
((a b c)))
==>
(foo
(a b c))
If what you mean is:
foo . ($ a b c)
is:
foo .
($ a b c)
Then indentation rules (specifically the "single datum on a line is
that datum" rule) make them identical.
foo .
($ a b c)
==>
(foo .
($ a b c))
==>
(foo $ a b c)
If you want to have "$" consistently in either an indentation or in
non-indentation contexts, then use {$} instead:
foo . {$} ==> (foo . $)
(foo . {$}) ==> (foo . $)
>
> but
>
> foo . $ $ a b c
>
> (The two '$' has different meanings!)
*shrug* yes.
Basically in an indentation context the first SUBLIST re-enters
it_expr production. it_expr can start with SUBLIST, which re-enters
it_expr and wraps its result in a single-item list, and the outer
SUBLIST then appends it as a single item to the outer list.
Assuming that "." is at first a symbol which a subsequent pass then
converts to the conventional meaning, then:
foo . $ $ a b c
On reaching the first SUBLIST, the parser has collected (foo |.|) as
the initial "head" production's value. The parser consumes that
SUBLIST (leaving "$ a b c") in the input stream, and re-enters
it_expr.
it_expr can start with SUBLIST (consuming the remaining $ and leaving
"a b c" in the input stream), and re-enters it_expr again. it_expr
then yields the value (a b c). Its next outermost call (the one
triggered by the second SUBLIST) wraps a layer of list, yielding ((a b
c)).
The next outermost call (the one triggered by the first SUBLIST)
appends the yielded value as a single item (i.e. an "append1" or
"snoc"), so yielding (foo |.| ((a b c)))
Assuming that (foo |.| ((a b c))) is then processed to (foo . ((a b
c))), then we get (foo (a b c)).
And incidentally, thus:
foo $ a b c ==> (foo (a b c))
while, as shown above:
foo . $ $ a b c ==> (foo (a b c))
So both SUBLIST's have the same meaning, while basically a "." cancels
out a subsequent "$".
Sincerely,
AmkG