Sweet:   an alternative to s-expressions
1 Sweet reading functions
sweet-read
sweet-read-syntax
8.12

Sweet: an alternative to s-expressions🔗ℹ

Asumu Takikawa <asumu@racket-lang.org>

This manual describes the sweet package, a Racket port of the sweet reader by David Wheeler. This packages provides the sweet reader as a language mixin, similar to the at-exp or s-exp modules.

 #lang sweet-exp package: sweet-exp-lib

To use sweet expressions, supply a #lang line like the following:

#lang sweet-exp racket
 
printf("Hello")

The third parameter on the #lang line is the base language used by the language mixin. The resulting language will use the bindings from the base language, but support sweet expression syntax. You can provide any language here such as racket, typed/racket, or others.

For example:

#lang sweet-exp typed/racket
 
define: fact([n : Integer]) : Integer
  if zero?(n)
     1
     {n * fact{n - 1}}

Or alternatively:

#lang sweet-exp lazy
 
define fibs
  cons 0 cons(1 map(+ fibs cdr(fibs)))
 
displayln list-ref(fibs 8)

Known issues: quasi-quotation combined with grouping does not behave according to the specification.

1 Sweet reading functions🔗ℹ

 (require sweet-exp/reader) package: sweet-exp-lib

procedure

(sweet-read [in])  any

  in : input-port? = (current-input-port)

procedure

(sweet-read-syntax [source-name in])  (or/c syntax? eof-object?)

  source-name : any/c = (object-name in)
  in : input-port? = (current-input-port)
These procedures implement the sweet-exp reader.

Examples:
> (require sweet-exp/reader)
> (sweet-read (open-input-string "printf(\"Hello\")"))

'(printf "Hello")