Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

60 rindas
1.1 KiB

  1. ;; regular arguments
  2. (define (make-counter)
  3. (let ((var 0))
  4. (lambda ()
  5. (set! var (+ 1 var)))))
  6. (define counter1 (make-counter))
  7. (assert (= (counter1) 1))
  8. (define counter2 (make-counter))
  9. (assert (= (counter2) 1))
  10. (assert (= (counter2) 2))
  11. (assert (= (counter1) 2))
  12. (assert (= (counter1) 3))
  13. (assert (= (counter2) 3))
  14. (assert (= (counter2) 4))
  15. (assert (= (counter2) 5))
  16. (assert (= (counter1) 4))
  17. (assert (= (counter1) 5))
  18. (define (g)
  19. (define x 0)
  20. (lambda ()
  21. (define temp x)
  22. (mutate x (+ x 1))
  23. temp))
  24. ;; key arguments
  25. (define (make-key-counter)
  26. ((lambda (:var)
  27. (lambda ()
  28. (mutate var (+ 1 var))
  29. var))
  30. :var 0))
  31. (define key-counter1 (make-key-counter))
  32. (assert (= (key-counter1) 1))
  33. (define key-counter2 (make-key-counter))
  34. (assert (= (key-counter2) 1))
  35. (assert (= (key-counter2) 2))
  36. (assert (= (key-counter1) 2))
  37. (assert (= (key-counter1) 3))
  38. (assert (= (key-counter2) 3))
  39. (assert (= (key-counter2) 4))
  40. (assert (= (key-counter2) 5))
  41. (assert (= (key-counter1) 4))
  42. (assert (= (key-counter1) 5))
  43. ;; rest arguments will no be copied so we don't need to test them here