diff --git a/lib/init-7.scm b/lib/init-7.scm index d265789f..63bb917c 100644 --- a/lib/init-7.scm +++ b/lib/init-7.scm @@ -706,7 +706,8 @@ (_reverse (rename 'reverse)) (_vector->list (rename 'vector->list)) (_list->vector (rename 'list->vector)) - (_cons3 (rename 'cons-source))) + (_cons3 (rename 'cons-source)) + (_underscore (rename '_))) (define ellipsis (if ellipsis-specified? (cadr expr) (rename '...))) (define lits (if ellipsis-specified? (car (cddr expr)) (cadr expr))) (define forms (if ellipsis-specified? (cdr (cddr expr)) (cddr expr))) @@ -729,7 +730,9 @@ (list _and (list _compare v (list _rename (list _quote p))) (k vars)) - (list _let (list (list p v)) (k (cons (cons p dim) vars))))) + (if (compare p _underscore) + (k vars) + (list _let (list (list p v)) (k (cons (cons p dim) vars)))))) ((ellipsis? p) (cond ((not (null? (cdr (cdr p)))) diff --git a/tests/r7rs-tests.scm b/tests/r7rs-tests.scm index 85328b89..a16d814c 100644 --- a/tests/r7rs-tests.scm +++ b/tests/r7rs-tests.scm @@ -460,6 +460,11 @@ (part-2x (10 (+ 21 22) (31 32) (41 42) (51 52) (+ 61 2) 77 . "tail"))) ;; underscore +(define-syntax underscore + (syntax-rules () + ((foo _) '_))) +(test '_ (underscore foo)) + (define-syntax count-to-2 (syntax-rules () ((_) 0)