From 7ddb707bb79b799a5bd16d4e49a2978ec98dc678 Mon Sep 17 00:00:00 2001 From: Linus Date: Wed, 16 Dec 2020 20:17:13 +0100 Subject: [PATCH] Made it a module. Put it in any directory, run guile -L . and then import (goof) in that directory. --- example.scm | 9 +++++ goof.scm | 60 +++++++++++++++++++++++------ helpers.scm => goof/helpers.scm | 2 +- iterators.scm => goof/iterators.scm | 0 ref-let.scm => goof/ref-let.scm | 2 +- 5 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 example.scm rename helpers.scm => goof/helpers.scm (92%) rename iterators.scm => goof/iterators.scm (100%) rename ref-let.scm => goof/ref-let.scm (98%) diff --git a/example.scm b/example.scm new file mode 100644 index 0000000..c67eab1 --- /dev/null +++ b/example.scm @@ -0,0 +1,9 @@ +(load "goof.scm") + +(define (erathostenes n) + (define vec (make-vector n #t)) + (loop/list ((:for i (up-from 2 (to n))) + (:when (vector-ref vec i))) + (loop ((:for j (up-from (* 2 i) (to n) (by i)))) + (vector-set! vec j #f)) + i)) diff --git a/goof.scm b/goof.scm index b7c212c..0fe9164 100644 --- a/goof.scm +++ b/goof.scm @@ -32,14 +32,50 @@ ;; name, and the fact that I goofed in the chibi issue tracker when ;; trying to understand the iterator protocol. -;; TODO add :let and :let* to forify +(define-module (goof) + #:use-module (goof helpers) + #:use-module (goof ref-let) + #:use-module ((srfi srfi-1) #:select (circular-list)) + #:use-module (srfi srfi-71) + #:use-module (rnrs io simple) + #:use-module (ice-9 futures) + #:export (loop + + loop/list + loop/sum + loop/product + loop/first + loop/last + loop/and + loop/or + loop/list/parallel + + :when :unless :break :final :let :let* :subloop :for :acc -(use-modules (helpers) - (ref-let) - ((srfi srfi-1) #:select (circular-list)) - (srfi srfi-71) - (rnrs io simple) - (ice-9 futures)) + in + in-list + in-lists + + in-vector in-reverse-vector + in-string in-reverse-string + + in-port + in-file + in-generator + up-from + down-from + accumulating + folding + listing + listing-reverse + appending + appending-reverse + summing + multiplying + + in-cycle + in-indexed + )) (define-aux-syntaxes ;; Auxiliary syntax for the loop clauses @@ -53,20 +89,20 @@ ) -(include "iterators.scm") +(include "goof/iterators.scm") (define-syntax loop (syntax-rules (=>) ((loop () => expr body ...) - (let () expr)) + (loop ((:for ensure-once (up-from 0 1))) => expr body ...)) ((loop () body ...) - (let () body ...)) + (loop ((:for ensure-once (up-from 0 1))) body ...)) ((loop name () => expr body ...) - expr) + (loop name ((:for ensure-once (up-from 0 1))) => expr body ...)) ((loop name () body ...) - (if #f #f)) + (loop name ((:for ensure-once (up-from 0 1))) body ...)) ((loop (clauses ...) body ...) (ensure-for-clause (loop (clauses ...) body ...) loop-name (clauses ...) diff --git a/helpers.scm b/goof/helpers.scm similarity index 92% rename from helpers.scm rename to goof/helpers.scm index 6433cbb..f7e4186 100644 --- a/helpers.scm +++ b/goof/helpers.scm @@ -1,4 +1,4 @@ -(define-module (helpers) +(define-module (goof helpers) #:export (define-aux-syntax define-aux-syntaxes)) (define-syntax define-aux-syntax diff --git a/iterators.scm b/goof/iterators.scm similarity index 100% rename from iterators.scm rename to goof/iterators.scm diff --git a/ref-let.scm b/goof/ref-let.scm similarity index 98% rename from ref-let.scm rename to goof/ref-let.scm index a579353..ec4c404 100644 --- a/ref-let.scm +++ b/goof/ref-let.scm @@ -1,4 +1,4 @@ -(define-module (ref-let) +(define-module (goof ref-let) #:export (ref-let) #:use-module (ice-9 match) #:use-module (srfi srfi-71))