Advertisement
Guest User

Untitled

a guest
Apr 25th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 2.26 KB | None | 0 0
  1. #lang racket
  2.  
  3. ;; pomocnicza funkcja dla list tagowanych o określonej długości
  4.  
  5. (define (tagged-tuple? tag len p)
  6.   (and (list? p)
  7.        (= (length p) len)
  8.        (eq? (car p) tag)))
  9.  
  10. (define (tagged-list? tag p)
  11.   (and (pair? p)
  12.        (eq? (car p) tag)
  13.        (list? (cdr p))))
  14. ;;
  15.  
  16. (define (node l r)
  17.   (list 'node l r))
  18.  
  19. (define (node? n)
  20.   (tagged-tuple? 'node 3 n))
  21.  
  22. (define (node-left n)
  23.   (second n))
  24.  
  25. (define (node-right n)
  26.   (third n))
  27.  
  28. (define (leaf? n)
  29.   (or (symbol? n)
  30.       (number? n)
  31.       (null? n)))
  32.  
  33. ;;
  34.  
  35. (define (res v s)
  36.   (cons v s))
  37.  
  38. (define (res-val r)
  39.   (car r))
  40.  
  41. (define (res-state r)
  42.   (cdr r))
  43.  
  44. ;; random
  45.  
  46. (define (rand max)
  47.   (lambda (i)
  48.     (let ([v (modulo (+ (* 1103515245 i) 12345) (expt 2 32))])
  49.       (res (modulo v max) v))))
  50.  
  51. ;;
  52.  
  53. (define (rename t)
  54.   (define (rename-st t i)
  55.     (cond [(leaf? t) (res i (+ i 1))]
  56.           [(node? t)
  57.            (let* ([rl (rename-st (node-left t) i)]
  58.                   [rr (rename-st (node-right t) (res-state rl))])
  59.              (res (node (res-val rl) (res-val rr))
  60.                   (res-state rr)))]))
  61.   (res-val (rename-st t 0)))
  62.  
  63. ;;state app
  64. #|
  65. (define (help state0 args)
  66.   (cond
  67.     [(null? args) (res null state0)]
  68.     [else (let* ((r1 (car args) state0)
  69.                  (rest (helper (res-state r1) cdr args))
  70. |#
  71.  
  72. (define (st-app f x y)
  73.   (lambda (state0)
  74.     (let* ([rx (x state0)]
  75.            [ry (y (res-state rx))])
  76.       (res (f (res-val rx) (res-val ry))
  77.            (res-state ry)))))
  78.  
  79. (define (modify-st f)
  80.   (lambda (i)
  81.     (res null (f i))))
  82.  
  83. (define get-st
  84.   (lambda (i)
  85.     (res i i)))
  86. ;;
  87.  
  88. (define (inc n)
  89.   (+ n 1))
  90.  
  91. (define (rename2 t)
  92.   (define (rename-st t)
  93.     (cond [(leaf? t)
  94.            (st-app (lambda (x y) x)
  95.                    get-st
  96.                    (modify-st inc))]
  97.           [(node? t)
  98.            (st-app node
  99.                    (rename-st (node-left  t))
  100.                    (rename-st (node-right t)))]))
  101.   (res-val ((rename-st t) 0)))
  102.  
  103. (define (ren t)
  104.   (cond [(leaf? t) (lambda (s0)(let ([rn ((rand 400)  s0)]) (res (car rn) (cdr rn))))]
  105.         [(node? t) (st-app node (ren (node-left t)) (ren (node-right t)))]))
  106.  
  107. ;(node  (node 0) (node 6 0 0))
  108.  
  109. ((ren (node (node 0 0)  (node 0 0)))  321 )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement