(use test) (use dsssl-utils lambda+) (define (f a1 a2 #!optional (o1 'x) o2 #!rest rest #!key k1 k2) (print (list (list 'a1 a1 'a2 a2) (list 'o1 o1 'o2 o2) (list #:k1 k1 #:k2 k2) (list 'rest rest))) (dsssl-fixup ((o1 'x) o2) ((#:k1 k1) (#:k2 k2)) rest (list (list 'a1 a1 'a2 a2) (list 'o1 o1 'o2 o2) (list #:k1 k1 #:k2 k2) (list 'rest rest)) ) ) (test '((a1 1 a2 2) (o1 3 o2 #f) (#:k1 4 #:k2 #f) (rest ())) (f 1 2 #:k1 4 3)) (test-error (f 1 2 3 #:k1 4 5 #:k2)) (test '((a1 1 a2 2) (o1 4 o2 5) (#:k1 3 #:k2 6) (rest (7 8))) (f 1 2 #:k1 3 4 5 #:k2 6 7 8)) (test '((a1 1 a2 2) (o1 3 o2 6) (#:k1 4 #:k2 5) (rest (7 8))) (f 1 2 3 #:k1 4 #:k2 5 6 7 8)) (test '((a1 1 a2 2) (o1 3 o2 5) (#:k1 4 #:k2 6) (rest (7 8))) (f 1 2 3 #:k1 4 5 #:k2 6 7 8)) (test '((a1 1 a2 2) (o1 3 o2 5) (#:k1 4 #:k2 6) (rest ())) (f 1 2 3 #:k1 4 5 #:k2 6)) ;; (define (foo r1 r2 #!optional o1 (o2 '()) #!rest rest #!key k1 (k2 'foo)) `((,r1 ,r2) (,o1 ,o2) (,k1 ,k2) ,rest)) (define+ (foo+ r1 r2 #!optional o1 (o2 '()) #!rest rest #!key k1 (k2 'foo)) `((,r1 ,r2) (,o1 ,o2) (,k1 ,k2) ,rest)) (test '((1 2) (3 #:k1) (#f foo) (4 5 6 7 8)) (foo 1 2 3 #:k1 4 5 6 7 8)) (test '((1 2) (3 5) (4 foo) (6 7 8)) (foo+ 1 2 3 #:k1 4 5 6 7 8)) (test-exit)