Created
August 11, 2012 12:18
-
-
Save kiyoka/3324169 to your computer and use it in GitHub Desktop.
lazy special form sample
This file contains 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
(define-syntax lazy | |
(syntax-rules () | |
((lazy) | |
(error "lazy requires (lazy s-expression)")) | |
((lazy s-exp) | |
(let-syntax | |
((map | |
(syntax-rules (%lazy-map) | |
((map) | |
(error "map requires (map func lst ...)")) | |
((map func) | |
(error "map requires (map func lst ...)")) | |
((map func lst1) | |
(%lazy-map func lst1)) | |
((map func lst1 lst2) | |
(%lazy-map func lst1 lst2)) | |
((map func lst1 lst2 lst3) | |
(%lazy-map func lst1 lst2 lst3)))) | |
(for-each | |
(syntax-rules (%lazy-for-each) | |
((for-each) | |
(error "for-each requires (for-each func lst ...)")) | |
((for-each func) | |
(error "for-each requires (for-each func lst ...)")) | |
((for-each func lst1) | |
(%lazy-for-each func lst1)) | |
((for-each func lst1 lst2) | |
(%lazy-for-each func lst1 lst2)) | |
((for-each func lst1 lst2 lst3) | |
(%lazy-for-each func lst1 lst2 lst3)) | |
)) | |
(filter | |
(syntax-rules (%lazy-filter) | |
((filter) | |
(error "filter requires (filter func lst ...)")) | |
((filter func) | |
(error "filter requires (filter func lst ...)")) | |
((filter func lst1) | |
(%lazy-filter func lst1)) | |
((filter func lst1 lst2) | |
(%lazy-filter func lst1 lst2)) | |
((filter func lst1 lst2 lst3) | |
(%lazy-filter func lst1 lst2 lst3)) | |
))) | |
s-exp)) | |
((lazy s-exp other) | |
(error "lazy requires (lazy s-expression)")))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment