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 "\ ".
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?

--- David A. Wheeler

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