Path: utzoo!attcan!uunet!husc6!rice!leto!matthias From: matthias@leto.rice.edu (Matthias Felleisen) Newsgroups: comp.lang.scheme Subject: Re: collect special form for streams Message-ID: <748@thalia.rice.edu> Date: 1 Jun 88 19:09:26 GMT References: <294@gt-eedsp.UUCP> <50472@ti-csl.CSNET> Sender: usenet@rice.edu Reply-To: matthias@rice.edu (Matthias Felleisen) Distribution: na Organization: Rice University, Houston Lines: 43 In article <50472@ti-csl.CSNET> gateley@mips.UUCP (John Gateley) writes: >In article <294@gt-eedsp.UUCP> schw@gt-eedsp.UUCP (Dave Schwartz) writes: >>How can the "collect" special form for streams (from Chap. 3 of >>Structure and Interpretation of Computer Programs) be implemented for >>TI PC-Scheme? I have Kent Dybvig's "extend-syntax," but this does not >>appear to be powerful enough for this special form. > >Extend-syntax's pattern matching is not powerful enough to do this. >You have to use the "with" feature to generate the v functions. (by calling >a function which builds them, i.e. you do them by hand). I also used a >help macro to make the flatmap parts of the expression (watch out for >keywords). If this is not enough help, email me and I will send you my code. > >John Gateley >gateley@tilde.csc.ti.com John, what do you think of this one? (syntax (collect (( ) ...) ) (map (lambda (tuple) (help-res ( ...) )) (filter (lambda (tuple) (help-res ( ...) )) (flat-help (( ) ...) (list ...))))) (extend-syntax (help-res) [(help-res ( ...) ) (let (( (car tuple)) (tuple (cdr tuple))) (help-res ( ...) ))] [(help-res () ) ]) (extend-syntax (flat-help) [(flat-help (( ) ( ) ( ) ...) last) (flatmap (lambda () (flat-help (( ) ( ) ...) last)) )] [(flat-help (( )) last) (map (lambda () last) )]) -- Matthias P.S. Eugene Kohlbecker invented extend-syntax.