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
[email protected]
https://lists.sourceforge.net/lists/listinfo/readable-discuss