You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

61 lines
1.1 KiB

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