Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- ;; pomocnicza funkcja dla list tagowanych o określonej długości
- (define (tagged-tuple? tag len p)
- (and (list? p)
- (= (length p) len)
- (eq? (car p) tag)))
- (define (tagged-list? tag p)
- (and (pair? p)
- (eq? (car p) tag)
- (list? (cdr p))))
- ;;
- (define (node l r)
- (list 'node l r))
- (define (node? n)
- (tagged-tuple? 'node 3 n))
- (define (node-left n)
- (second n))
- (define (node-right n)
- (third n))
- (define (leaf? n)
- (or (symbol? n)
- (number? n)
- (null? n)))
- ;;
- (define (res v s)
- (cons v s))
- (define (res-val r)
- (car r))
- (define (res-state r)
- (cdr r))
- ;; random
- (define (rand max)
- (lambda (i)
- (let ([v (modulo (+ (* 1103515245 i) 12345) (expt 2 32))])
- (res (modulo v max) v))))
- ;;
- (define (rename t)
- (define (rename-st t i)
- (cond [(leaf? t) (res i (+ i 1))]
- [(node? t)
- (let* ([rl (rename-st (node-left t) i)]
- [rr (rename-st (node-right t) (res-state rl))])
- (res (node (res-val rl) (res-val rr))
- (res-state rr)))]))
- (res-val (rename-st t 0)))
- ;;state app
- #|
- (define (help state0 args)
- (cond
- [(null? args) (res null state0)]
- [else (let* ((r1 (car args) state0)
- (rest (helper (res-state r1) cdr args))
- |#
- (define (st-app f x y)
- (lambda (state0)
- (let* ([rx (x state0)]
- [ry (y (res-state rx))])
- (res (f (res-val rx) (res-val ry))
- (res-state ry)))))
- (define (modify-st f)
- (lambda (i)
- (res null (f i))))
- (define get-st
- (lambda (i)
- (res i i)))
- ;;
- (define (inc n)
- (+ n 1))
- (define (rename2 t)
- (define (rename-st t)
- (cond [(leaf? t)
- (st-app (lambda (x y) x)
- get-st
- (modify-st inc))]
- [(node? t)
- (st-app node
- (rename-st (node-left t))
- (rename-st (node-right t)))]))
- (res-val ((rename-st t) 0)))
- (define (ren t)
- (cond [(leaf? t) (lambda (s0)(let ([rn ((rand 400) s0)]) (res (car rn) (cdr rn))))]
- [(node? t) (st-app node (ren (node-left t)) (ren (node-right t)))]))
- ;(node (node 0) (node 6 0 0))
- ((ren (node (node 0 0) (node 0 0))) 321 )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement