-
-
Save mwgamera/c9b2fd34e2ec03d81c1e58d6d1be22fa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; (match-let ((pattern values) ...) body) | |
(macro (match-let form) | |
(letrec | |
((match (lambda (var val) | |
(cond | |
((symbol? var) | |
`((,var ,val))) | |
((pair? var) | |
`(,@(match (car var) `(car ,val)) | |
,@(match (cdr var) `(cdr ,val)))) | |
((vector? var) | |
(let next ((i 0)) | |
`(,@(match (vector-ref var i) `(vector-ref ,val ,i)) | |
,@(if (< (+ 1 i) (vector-length var)) | |
(next (+ 1 i)) '())))) | |
(#t '()) | |
)))) | |
(let ((vars (map car (cadr form))) | |
(vals (map cadr (cadr form))) | |
(body (cddr form)) | |
(sym (gensym))) | |
`(let ((,sym (list ,@vals))) | |
(let ,(match vars sym) ,@body))))) | |
; (match-let (((non-empty x0 y0 x1 y1) | |
; (gimp-selection-bounds img))) | |
; (print `(width ,(- x1 x0))) | |
; (print `(height ,(- y1 y0))) | |
; '... ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment