Re: [svn:perl6-synopsis] r9727 - doc/trunk/design/syn

2006-07-01 Thread Larry Wall
On Sat, Jul 01, 2006 at 03:31:52PM +0300, Markus Laire wrote:
: On 7/1/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
: >+In particular, these forms disable the lookahead for an adverbial 
: >argument,
: >+so while
: >+
: >+q:n($foo)
: >+
: >+will misinterpret C<$foo> as the C<:n> argument,
: >+
: >+qn(stuff)
: >+
: >+has the advantage of misinterpreting it as the argument to the C
: >+function instead.  C<:)>
: >+
: >+But parens are special that way.  Other bracketing characters are special
: >+only if they can be mistaken for adverbial arguments, so
: >+
: >+qn[stuff]
: >+
: >+is fine, while
: >+
: >+q:n[stuff]
: >+
: >+is not.  Basically, just don't use parens for quote delimiters, and always
: >+put a space after your adverbs.
: 
: Why q:n[stuff] is not fine? Shouldn't that pass [stuff] to adverb n?

That's what it does.  But it's not fine if you expected [...] to
delimit the quoted string instead.

: Also, in what way are parens special?
: Doesn't qn(stuff) and qn[stuff] both mean same thing?

Nope, qn(stuff) is always a function call.  q(foo) is always a function
call, not a quote.

: And both q:n(stuff) and q:n[stuff] pass something to adverb n. (First
: passes stuff, second passes [stuff])

That is correct.  My intent with the quote declarator however is that
there be an implicit space after it, so the n on the end of qn no longer
functions as an adverb, at least in terms of looking for a subsequent
argument.  I will attempt to clarify the distinction between quotes
and ordinary macros.  Thanks.

Larry


Re: [svn:perl6-synopsis] r9727 - doc/trunk/design/syn

2006-07-01 Thread Markus Laire

On 7/1/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:

+In particular, these forms disable the lookahead for an adverbial argument,
+so while
+
+q:n($foo)
+
+will misinterpret C<$foo> as the C<:n> argument,
+
+qn(stuff)
+
+has the advantage of misinterpreting it as the argument to the C
+function instead.  C<:)>
+
+But parens are special that way.  Other bracketing characters are special
+only if they can be mistaken for adverbial arguments, so
+
+qn[stuff]
+
+is fine, while
+
+q:n[stuff]
+
+is not.  Basically, just don't use parens for quote delimiters, and always
+put a space after your adverbs.


Why q:n[stuff] is not fine? Shouldn't that pass [stuff] to adverb n?

Also, in what way are parens special?
Doesn't qn(stuff) and qn[stuff] both mean same thing?
And both q:n(stuff) and q:n[stuff] pass something to adverb n. (First
passes stuff, second passes [stuff])

--
Markus Laire


[svn:perl6-synopsis] r9727 - doc/trunk/design/syn

2006-06-30 Thread larry
Author: larry
Date: Fri Jun 30 15:17:55 2006
New Revision: 9727

Modified:
   doc/trunk/design/syn/S02.pod

Log:
Revised quote declarator.


Modified: doc/trunk/design/syn/S02.pod
==
--- doc/trunk/design/syn/S02.pod(original)
+++ doc/trunk/design/syn/S02.podFri Jun 30 15:17:55 2006
@@ -14,7 +14,7 @@
   Date: 10 Aug 2004
   Last Modified: 30 Jun 2006
   Number: 2
-  Version: 46
+  Version: 47
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -1344,21 +1344,50 @@
 :f  :function   Interpolate & calls
 :c  :closureInterpolate {...} expressions
 :b  :backslash  Interpolate \n, \t, etc. (implies :q at least)
+:code   Quasiquoting
 
-[Conjectural: Ordinarily the colon is required on adverbs, but the
-"quote" declarator allows you to combine any of the existing adverbial
-forms above without an intervening colon:
-
-quote qw;   # declare a P5-esque qw//
-quote qqx;  # equivalent to P5's qx//
-quote qn;   # completely raw quote qn//
-quote qnc;  # interpolate only closures
-quote qqxwto;   # qq:x:w:to//
+Ordinarily the colon is required on adverbs, but the C declarator
+allows you to combine any of the existing adverbial forms above
+without an intervening colon:
 
-]
+quote qw;   # declare a P5-esque qw// meaning q:w
+quote qn;   # completely raw quote qn//
+quote qnc;  # q:n:c//, interpolate only closures
+
+If you want to abbreviate further, you may also give an explicit
+definition as either a string or quasiquote:
+
+quote qx = 'qq:x';  # equivalent to P5's qx//
+quote qTO = 'qq:x:w:to';# qq:x:w:to//
+quote circumfix:<❰ ❱> = q:code { .quoteharder };  # or some such...
+
+In particular, these forms disable the lookahead for an adverbial argument,
+so while
+
+q:n($foo)
+
+will misinterpret C<$foo> as the C<:n> argument,
+
+qn(stuff)
+
+has the advantage of misinterpreting it as the argument to the C
+function instead.  C<:)>
+
+But parens are special that way.  Other bracketing characters are special
+only if they can be mistaken for adverbial arguments, so
+
+qn[stuff]
+
+is fine, while
+
+q:n[stuff]
+
+is not.  Basically, just don't use parens for quote delimiters, and always
+put a space after your adverbs.
 
 If this is all too much of a hardship, you can define your own quote
-adverbs and operators.  All the uppercase adverbs are reserved for
+adverbs and operators as standard macros.
+All the uppercase adverbs are reserved for
 user-defined quotes.  All of Unicode above Latin-1 is reserved for
 user-defined quotes.