123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #lang racket
- (define saved-cont #f)
- (define (test-cont)
- (let ((x 0))
- (call/cc
- (lambda (k)
- (set! saved-cont k)))
- (set! x (+ x 1))
- (display x)
- (newline)))
- (define (iterate f v)
- (delay (cons v (iterate f (f v)))))
- (define (take n prom)
- (if (= n 0)
- '()
- (let ((v (force prom)))
- (cons (car v) (take (- n 1) (cdr v))))))
- (define (ftree treef treed)
- (cond
- ((null? treef) treed)
- ((list? treef) (cons (ftree (car treef) (car treed))
- (ftree (cdr treef) (cdr treed))))
- (else; should be atoms
- (treef treed))))
- (define (first x y) x)
- (define (infinity) (+ 1 (infinity)))
- (define lazy-infinity (delay (infinity)))
- (define (re-map f L cond?)
- (let loop ((res '())
- (cur L))
- (if (null? cur)
- res
- (let* ((k #f)
- (v (call/cc
- (lambda (cont)
- (set! k cont)
- (f (car cur))))))
- (if (cond? v)
- (cons k v)
- (loop (append res (list v))
- (cdr cur)))))))
- (struct cnode (value next) #:mutable)
- (define *end* '---end---)
- (define (cend)
- (let ((node (cnode *end* #f)))
- (set-cnode-next! node node)
- node))
- (define (ccons x node)
- (if (cend? node)
- (let ((out (cnode x #f)))
- (set-cnode-next! out node)
- (set-cnode-next! node out)
- out)
- (let ((the-end (get-end node))
- (out (cnode x node)))
- (set-cnode-next! the-end out)
- out)))
- (define (cend? clist)
- (and (cnode? clist)
- (eq? (cnode-value clist) *end*)))
- (define (get-end clist)
- (if (cend? clist)
- clist
- (get-end (cnode-next clist))))
- (define (cmap f clist)
- (if (cend? clist)
- (cend)
- (ccons (f (cnode-value clist))
- (cmap f (cnode-next clist)))))
- (define-syntax-rule (my-while condition body ...)
- (let loop ()
- (when condition
- body ...
- (loop))))
- (define (genFig n)
- (let loop ((f '())
- (k 0))
- (if (< k n)
- (loop (cons (genRow n k) f)
- (+ k 1))
- f)))
- (define (genRow n k)
- (let loop ((r '())
- (i 0))
- (if (< i n)
- (loop (cons (if (= i k) 1 0) r)
- (+ i 1))
- r)))
- (define (infinity)
- (+ 1 (infinity)))
- (define (fst x y) x)
- (define lazy-infinity (delay(infinity)))
- ;(fst 3 (infinity))
- (force (fst 3 lazy-infinity))
- (fst 3 lazy-infinity)
- (define res (delay (+ 2 5)))
- (force res)
- (force (delay (fst 3 lazy-infinity)))
|