PageRenderTime 58ms CodeModel.GetById 33ms RepoModel.GetById 0ms app.codeStats 0ms

/t/srfi-72.lisp

http://github.com/manuel/ell
Lisp | 29 lines | 25 code | 4 blank | 0 comment | 0 complexity | 34faf5d211d188ff34319e69cc37f366 MD5 | raw file
  1. (defsyntax if-it
  2. (lambda (form)
  3. (apply-syntax-list (lambda (k e1 e2 e3)
  4. (let ((it (datum->syntax k 'it)))
  5. #`(let ((,it ,e1))
  6. (if ,it ,e2 ,e3))))
  7. form)))
  8. (defsyntax when-it
  9. (lambda (form)
  10. (apply-syntax-list (lambda (k e1 e2)
  11. (let ((the-it (datum->syntax k 'it)))
  12. #`(if-it ,e1
  13. (let ((,the-it it)) ,e2)
  14. (if #f #f))))
  15. form)))
  16. (defmacro my-or (e1 e2)
  17. #`(if-it ,e1 it ,e2))
  18. (print-object (if-it "2" it "3"))
  19. (print-object (when-it "42" it))
  20. (print-object (my-or "2" "3"))
  21. (print-object (let ((it "1")) (if-it "42" it #f)))
  22. (print-object (let ((it "1")) (when-it "42" it)))
  23. (print-object (let ((it "1")) (my-or "42" it)))
  24. (print-object (let ((it "1")) (my-or #f it)))
  25. (print-object (let ((if-it "1")) (when-it "42" it)))