On Fri, Nov 14, 2008 at 7:14 AM, David A. Wheeler <[EMAIL PROTECTED]>wrote:

> Alan Manuel Gloria asked:
> > How about the cond-style if of Arc?
> > (if
> > (condition1)
> > (dothis1)
> > (condition2)
> > (dothis2)
> > (default))
> ...
> > if
> >  (condition1)
> >  -> (dothis1)
> >  (condition2)
> >  -> (dothis2)
> >  -> (default)
>
> I presume the intent is that "->" at the beginning
> of a line is ignored.  Is that what you mean??
> I'll comment based on that possibly wrong assumption,
> please correct me if that wasn't intended.
>
> That _looks_ nice, but two issues:
> 1. That rule would make "->" unusable, which in many apps is really
> important.
> A less-common symbol could work, though, such as "\ ".


True.  \ does look nice.


- Show quoted text -

>
> 2. For short pairs that's really awkward.  You still have to use 2 lines
> to provide information that in traditional Lisp notation only requires
> one line.  For attribute-value pairs that's really important.
>
> For example, given the SMT-LIB example:
> (benchmark bignum
>  :source "SMT-COMP'06 Organizers"
>  :notes "This benchmark is designed to check if the DP supports
> bignumbers."
>  :status sat
>  :difficulty "0"
>  :category "check"
>  :logic QF_RDL
>  :extrafuns ((x1 Real))
>  :extrafuns ((x2 Real))
>  :extrafuns ((x3 Real))
>  :extrafuns ((x4 Real))
>  :formula
>  (and (<= (- x1 x2) (/ 1 1000000000000000000000000000000000))
>       (<= (- x2 x3) (/ 1 2000000000000000000000000000000011))
>       (<= (- x3 x4) (~ (/ 1 1000000000000000000000000000000000)))
>       (<= (- x4 x1) (~ (/ 1 2000000000000000000000000000000012)))))
>
>
> The simple rule "-> ignored at beginning of line" could be used, but that
> would produce:
> benchmark bignum
>  :source
>  -> "SMT-COMP'06 Organizers"
>  :notes
>  -> "This benchmark is designed to check if the DP supports bignumbers."
>  :status
>  ->  sat
>  :difficulty
>  -> "0"
>  :category
>  -> "check"
>  :logic
>  -> QF_RDL
>  :extrafuns
>  -> ((x1 Real))
>  :extrafuns
>  -> ((x2 Real))
>  :extrafuns
>  -> ((x3 Real))
>  :extrafuns
>  -> ((x4 Real))
>  :formula
>  -> and  { {x1 - x2} <= {1 / 1000000000000000000000000000000000} }
>                { {x2 - x3} <= {1 / 2000000000000000000000000000000011} }
>                { {x3 - x4} <= ~({1 / 1000000000000000000000000000000000}) }
>                { {x4 - x1} <= ~({1 / 2000000000000000000000000000000012})}
> )
>
> Yuk.  Vertical space is precious; most screens have less vertical than
> horizontal space.
>
> I think we must NOT use "->" as the symbol, anyway.
> So how about "\ " (backslash followed by space)
> as the special symbol?  That's rather improbable outside a
> string element; how many times do you need a symbol beginning
> with space or newline?
>
> So here's another rule idea, inspired by that approach.
> When doing indentation processing:
> 1. A "\ " at the beginning of the line (after whitespace) is ignored
> (recursively, so you can have several if you want them).
> 2. INSIDE a line, "\ " means "treat this as a line break,
> with the next line beginning at this same indentation level".
> 3. At the END of a line, "\" means "ignore the newline"; it
> basically merges the line with the next one & ignores indentation.
>
> If we do that, we can write:
>
> ; When condition1, dothis1, etc. are lengthy, you can do this:
> if
>  (condition1)
>  \ (dothis1)
>  (condition2)
>  \ (dothis2)
>  (default)
>
> ; When condition1, dothis1, etc. are short, you can do this:
> if
>  (condition1) \ (dothis1)
>  (condition2) \ (dothis2)
>  (default)
>
> benchmark bignum
>  :source \ "SMT-COMP'06 Organizers"
>  :notes \ "This benchmark is designed to check if the DP supports
> bignumbers."
>  :status \ sat
>  :difficulty \ "0"
>  :category \ "check"
>  :logic \ QF_RDL
>  :extrafuns \ ((x1 Real))
>  :extrafuns \ ((x2 Real))
>  :extrafuns \ ((x3 Real))
>  :extrafuns \ ((x4 Real))
>  :formula
>  \ and  { {x1 - x2} <= {1 / 1000000000000000000000000000000000} }
>         { {x2 - x3} <= {1 / 2000000000000000000000000000000011} }
>         { {x3 - x4} <= ~({1 / 1000000000000000000000000000000000}) }
>         { {x4 - x1} <= ~({1 / 2000000000000000000000000000000012})} )
>
> ; or alternatively:
> benchmark bignum \
>  :source "SMT-COMP'06 Organizers" \
>  :notes "This benchmark is designed to check if the DP supports
> bignumbers." \
>  :status sat \
>  :difficulty "0" \
>  :category "check" \
>  :logic QF_RDL \
>  :extrafuns ((x1 Real)) \
>  :extrafuns ((x2 Real)) \
>  :extrafuns ((x3 Real)) \
>  :extrafuns ((x4 Real)) \
>  :formula \
>  and  { {x1 - x2} <= {1 / 1000000000000000000000000000000000} }
>         { {x2 - x3} <= {1 / 2000000000000000000000000000000011} }
>         { {x3 - x4} <= ~({1 / 1000000000000000000000000000000000}) }
>         { {x4 - x1} <= ~({1 / 2000000000000000000000000000000012})} )
>
> ; If you reorder the ":formula" entry you can see why just the "\ at the
> end"
> ; doesn't completely solve the problem.  You can't really do that here:
> benchmark bignum
>  :logic \ QF_RDL
>  :formula
>  \ and  { {x1 - x2} <= {1 / 1000000000000000000000000000000000} }
>         { {x2 - x3} <= {1 / 2000000000000000000000000000000011} }
>         { {x3 - x4} <= ~({1 / 1000000000000000000000000000000000}) }
>         { {x4 - x1} <= ~({1 / 2000000000000000000000000000000012})} )
>  :source \ "SMT-COMP'06 Organizers"
>  :notes \ "This benchmark is designed to check if the DP supports
> bignumbers."
>  :status \ sat
>  :difficulty \ "0"
>  :category \ "check"
>  :extrafuns \ ((x1 Real))
>  :extrafuns \ ((x2 Real))
>  :extrafuns \ ((x3 Real))
>  :extrafuns \ ((x4 Real))
>
> Hmm, this rule doesn't seem too bad.  It's relatively
> simple, and _seems_ useful.   I _could_ be convinced.
> Thoughts?
>

Hmm.

if
  aprim ast \ expand-prim ast
  acond ast \ expand-cond ast
             \ do
                zap [map expansion _] ast!subx
                ast


Not bad.

Sincerely,
AmkG
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Readable-discuss mailing list
Readable-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/readable-discuss

Reply via email to