[CM] introducing SAL

Rick Taube taube@uiuc.edu
Thu, 6 Jul 2006 11:49:18 -0500

Introducing SAL, an alternate syntax for working with CM and Lisp. Sal 
provides commands, statements and infix sexprs. SAL has its own 
lexer/parser and combines features of lisp, dylan, pla and stella. Sal 
comes with its own Emacs mode (sal.el) that provides syntax 
highlighting and eval services via SLIME.


this is what sal code looks like (much prettier with syntax 

; i am a comment. the print command:

print list(1, 2 + 3, 4)

print "the value is: ", interpl( between(0.0,1.0), {0 0 50 1 100 0})

; the define command:

define variable hi = pi * random(2),
                 ho = list(hi,2,3)

define function foo(n)
   loop with l = list()
     repeat n
     set l &= random(127)
     finally return l

define process bar(n, r, lb, ub)
   run repeat n
     for k = between(lb,ub)
	output make(<midi>, time: now(), keynum: k)
     wait random(r)

; open and sprout commands

open "test.mid", versioning: #t

sprout bar(20,.1, 60, 90)

sprout list(bar(30, .1, 60,70), bar(20,.2,30,50)) at {0 1}

load "rts.sys", "midishare.sys"

open "midi-port.ms"

rts 1

sprout bar(20, .1, 60, 80)


SAL is brand new so it may change a bit -- I would be greatful for 
feedback and suggestions.

to try it out:
   install the tarball where you put other cm systems
   add (load "/path/to/sal/sal.el") to your .emacs file
   start cm under slime and do (use-system :sal)
   edit examples.sal, follow directions at top