From 749dd8439730c404058c7a672252ab19967268ac Mon Sep 17 00:00:00 2001 From: Tim Vaughan Date: Sun, 6 Nov 2016 18:06:06 +1300 Subject: [PATCH] Implemented and and or as macros. --- scheme-library.scm | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/scheme-library.scm b/scheme-library.scm index ffe02ea..aad91f4 100644 --- a/scheme-library.scm +++ b/scheme-library.scm @@ -87,6 +87,35 @@ (error "cond requires at least one clause.") (expand-clauses clauses))) +; and + +(define (expand-and-expressions expressions) + (if (null? expressions) + #t + (let ((first (car expressions)) + (rest (cdr expressions))) + `(if ,first + ,(expand-and-expressions rest) + #f)))) + +(define-macro (and . expressions) + (expand-and-expressions expressions)) + +; or + +(define (expand-or-expressions expressions) + (if (null? expressions) + #f + (let ((first (car expressions)) + (rest (cdr expressions))) + `(if ,first + #t + ,(expand-or-expressions rest))))) + +(define-macro (or . expressions) + (expand-or-expressions expressions)) + + ;; TESTING (define-macro (backwards . body) -- 2.20.1