smalltalk-tng

diff experiments/partial-eval/pe.scm @ 323:454c18798969

merger
author Tony Garnock-Jones <tonygarnockjones@gmail.com>
date Tue Feb 07 11:34:20 2012 -0500 (3 months ago)
parents 2ab69289317c
children
line diff
     1.1 --- a/experiments/partial-eval/pe.scm	Wed Sep 15 16:48:24 2010 -0400
     1.2 +++ b/experiments/partial-eval/pe.scm	Tue Feb 07 11:34:20 2012 -0500
     1.3 @@ -767,6 +767,28 @@
     1.4  		     (* x 2))
     1.5  		   (list->stream '(1 2 3 4 5))))))
     1.6  
     1.7 +(define list-serializer
     1.8 +  '(letrec ((ser (lambda* (x emit k)
     1.9 +		   (if (pair? x)
    1.10 +		       (emit 'open
    1.11 +			     (lambda* (emit)
    1.12 +			       (letrec ((serlist (lambda* (xs emit k)
    1.13 +						   (if (pair? xs)
    1.14 +						       (ser (car x) emit
    1.15 +							    (lambda* (emit)
    1.16 +							      (serlist (cdr xs) emit k)))
    1.17 +						       (k emit)))))
    1.18 +				 (serlist x emit (lambda* (emit)
    1.19 +						   (emit 'close k))))))
    1.20 +		       (if (number? x)
    1.21 +			   (emit x k)
    1.22 +			   (error 'not-supported-in-ser))))))
    1.23 +     (letrec ((collect (lambda* (v k)
    1.24 +			 (cons v (k collect)))))
    1.25 +       (ser '(12 22 32)
    1.26 +	    collect
    1.27 +	    (lambda* (emit) '())))))
    1.28 +
    1.29  ;;; Local Variables:
    1.30  ;;; eval: (put 'lambda* 'scheme-indent-function 1)
    1.31  ;;; End: