Made it a module.

Put it in any directory, run guile -L . and then import (goof) in that directory.
This commit is contained in:
Linus 2020-12-16 20:17:13 +01:00
parent 317b3e732b
commit 7ddb707bb7
5 changed files with 59 additions and 14 deletions

9
example.scm Normal file
View file

@ -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))

View file

@ -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 ...)

View file

@ -1,4 +1,4 @@
(define-module (helpers)
(define-module (goof helpers)
#:export (define-aux-syntax define-aux-syntaxes))
(define-syntax define-aux-syntax

View file

@ -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))