diff --git a/scm.mes b/scm.mes index 665007f6..6aad5420 100755 --- a/scm.mes +++ b/scm.mes @@ -80,3 +80,15 @@ EOF (define-macro (let bindings . body) (cons (cons 'lambda (cons (split-params bindings '()) body)) (split-values bindings '()))) + +(define (expand-let* bindings body) + (cond ((null bindings) + (cons (cons 'lambda (cons '() body)) '())) + (#t + (cons + (cons 'lambda (cons (cons (caar bindings) '()) + (cons (expand-let* (cdr bindings) body) '()))) + (cdar bindings))))) + +(define-macro (let* bindings . body) + (expand-let* bindings body)) diff --git a/test.mes b/test.mes index f7d5d9ea..10a50fab 100644 --- a/test.mes +++ b/test.mes @@ -82,4 +82,17 @@ `(aa bb ,c) (display `(pp qq ,c)) (newline) + +(display + (let* ((aa 2) + (bb (+ aa 3)) + #! boo !# + ;;(bb 4) + ) + (display 'allo:) + bb)) + +(newline) +(display 'let*-dun) +(newline) '()