Other miscellaneous stuff
Abdulaziz Ghuloum 25 Oct 2007 04:41 UTC
Greetings,
A few notes to add to Andre's:
* Should the library name have a SRFI-nnn prefix?
* The (stream-primitives) library should import (rnrs mutable-pairs)
since it
uses set-car! and set-cdr!.
* The export form in (stream-derived) should be
(export list-of-exports ...)
and not
(export (list of exports ...))
* The code for stream-match-pattern should be:
(define-syntax stream-match-pattern
(lambda (x)
(define (wildcard? x)
(and (identifier? x)
(free-identifier=? x #'_)))
(syntax-case x ()
((stream-match-pattern strm () (binding ...) body)
#'(and (stream-null? strm) (let (binding ...) body)))
((stream-match-pattern strm (w? . rest) (binding ...) body)
(wildcard? #'w?)
#'(and (stream-pair? strm)
(let ((strm (stream-cdr strm)))
(stream-match-pattern strm rest (binding ...)
body))))
((stream-match-pattern strm (var . rest) (binding ...) body)
#'(and (stream-pair? strm)
(let ((temp (stream-car strm)) (strm (stream-cdr
strm)))
(stream-match-pattern strm rest ((var temp)
binding ...) body))))
((stream-match-pattern strm w? (binding ...) body)
(wildcard? #'w?)
#'(let (binding ...) body))
((stream-match-pattern strm var (binding ...) body)
#'(let ((var strm) binding ...) body)))))
Do you have any test cases for the two libraries?
Aziz,,,