Here's how you might write a library in r7rs draft 8 using s-expressions:

(define-library (amkg meow)
(export meow)
(import (scheme base))


(define (meow) (cat "meow" "meow"))

(define (cat . xs)
    (lambda (x)
      (display x) (newline))

) ; begin
) ; define-library

With proposed 0.7 semantics, it can be expressed in t-exprs as:

<* define-library \\ (amkg meow)
export meow
import (scheme base)

<* begin

define meow() $ cat "meow" "meow"

define cat(. xs)
    lambda (x)
      display x \\ newline()


I'm proposing, however, that the COLLECTINGLISTEND tokens should be
*optional*, since we expect the "large" usage of collecting lists to
encompass entire files.

That way, we can say in style guidelines for R7RS t-exprs:


*  To create an R7RS library out of a bunch of definitions in a file,
simply put something like the following at the top of your file; there
is no need to change your existing formatting of existing definitions:

<* define-library \\ (your library name)
  rename internal:your-definition external:your-definition
  (scheme base) ; you likely need this
  (some other library)

<* begin

define your-definition ...

* To create R6RS libraries, use something effectively similar to the
above, except you can only use "export" and "import", and exactly in
that order, make sure to import "(rnrs base (6))" instead of "(scheme
base)", and use "library" instead of "define-library".


Basically, we allow the user to remove trailing *> if the collecting
list is the last thin of importance in a file.  This is important
since in R7RS a library definition will have two trailing close parens
(one for the begin containing the definitions, the other for the
define-library) and we need two extra lines to contain the trailing *>
(I'm not sure what happens with "*> *>" on a line by itself; maybe
that'll work too, but still...)

I feel this reduces some of the line-noisiness of collecting lists
while allowing a more flexible indenting / spacing of library

What you think?


Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
Readable-discuss mailing list

Reply via email to