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:
