From bc732d3cb95d7e04bb9c78873c0a326df8311422 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 20 Aug 2016 03:16:10 -0400 Subject: [PATCH] Initial file --- srfi/2.scm | 35 +++++++++++++++++++++++++++++++++++ srfi/2.sld | 8 ++++++++ srfi/test-2.scm | 11 +++++++++++ 3 files changed, 54 insertions(+) create mode 100644 srfi/2.scm create mode 100644 srfi/2.sld create mode 100644 srfi/test-2.scm diff --git a/srfi/2.scm b/srfi/2.scm new file mode 100644 index 00000000..c537f8db --- /dev/null +++ b/srfi/2.scm @@ -0,0 +1,35 @@ +;;; +;;; husk-scheme +;;; http://justinethier.github.com/husk-scheme +;;; +;;; Implementation of SRFI-2: and-let* +;;; +(define-syntax and-let* + (syntax-rules () + ; Special case + ((and-let* ()) + #t) + ; No CLAWS, just body + ((and-let* () body ...) + (begin body ...)) + ; Special cases of below - CLAWS with no body + ((and-let* ((var expr)) ) + (let ((var expr)) + (and var))) + ((and-let* ((expr))) + (let ((tmp expr)) + (and tmp ))) + ((and-let* (expr)) + (let ((tmp expr)) + (and tmp ))) + ; General case - CLAWS and body + ((and-let* ((var expr) . rest) . body) + (let ((var expr)) + (and var (and-let* rest . body)))) + ((and-let* ((expr) . rest) . body) + (let ((tmp expr)) + (and tmp (and-let* rest . body)))) + ((and-let* (expr . rest) . body) + (let ((tmp expr)) + (and tmp (and-let* rest . body)))))) + diff --git a/srfi/2.sld b/srfi/2.sld new file mode 100644 index 00000000..50187811 --- /dev/null +++ b/srfi/2.sld @@ -0,0 +1,8 @@ +(define-library (2) ; (srfi 2) + (import (scheme base)) + (export + and-let* + ) + (include "2.scm") + (begin) +) diff --git a/srfi/test-2.scm b/srfi/test-2.scm new file mode 100644 index 00000000..8d7bb537 --- /dev/null +++ b/srfi/test-2.scm @@ -0,0 +1,11 @@ +(import (scheme base) + (scheme write) + (scheme cyclone pretty-print) + (2)) + +(pretty-print `( + ,(and-let* ((x 1) (y 2)) + (+ x y)) + ,(and-let* ((x 1) (y 2) (#f)) + (+ x y)) +))