let-keywords soo 09 May 2006 01:45 UTC

I've integrated LET-KEYWORDS and LET-KEYWORDS* into the ALET and ALET*
with a syntactic keyword `key'.  They use simple symbols as keywords.

Examples:

(define rest '(a 10 a 30 c 20 40))

(alet* ((key rest (a 1) (b 2 (< a b)) . c)) (list a b c))
=> error: duplicate keysymbol a

(alet* ((key rest allow-duplicate-keys
	     (a 1) (b 2 (< a b)) . c)) (list a b c))
=> error: unknown keysymbol c

(alet* ((key rest allow-duplicate-keys allow-other-keys
	    (a 1) (b 2 (< a b)) . c)) (list a b c))
=> error: no keysymbol 40

(alet* ((key rest allow-duplicate-keys allow-other-keys allow-non-keys
	    (a 1) (b 2 (< a b)) . c)) (list a b c))
=> (10 2 (a 30 c 20 40))

(alet* ((key rest #t (a 1) (b 2 (< a b)) . c)) (list a b c))
=> (10 2 (a 30 c 20 40))

((lambda (m . n)
      (alet* ((opt n (a 10) (b 20) (c 30) . d)
	      (key d (x 100) (y 200) ((a z) 300)))
       (list m a b c x y)))
    0 1 2 3 'z 30 'y 20 'x 10)
=> (0 30 2 3 10 20)

((lambda (m . n)
      (alet* ((key n (x 100) (y 200) ((a z) 300) . d)
	      (opt d (a 10) (b 20) (c 30)))
       (list m a b c x y)))
    0 'z 30 'y 20 'x 10 1 2 3)
=> (0 1 2 3 10 20)

--
Joo ChurlSoo