Skip to content

Instantly share code, notes, and snippets.

@kiyoka
Created August 11, 2012 12:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kiyoka/3324169 to your computer and use it in GitHub Desktop.
Save kiyoka/3324169 to your computer and use it in GitHub Desktop.
lazy special form sample
(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