Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

54 linhas
1.0 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. ;; key arguments
  20. (define (make-key-counter)
  21. ((lambda (:keys var)
  22. (lambda ()
  23. (mutate var (+ 1 var))
  24. var))
  25. :var 0))
  26. (define key-counter1 (make-key-counter))
  27. (assert (= (key-counter1) 1))
  28. (define key-counter2 (make-key-counter))
  29. (assert (= (key-counter2) 1))
  30. (assert (= (key-counter2) 2))
  31. (assert (= (key-counter1) 2))
  32. (assert (= (key-counter1) 3))
  33. (assert (= (key-counter2) 3))
  34. (assert (= (key-counter2) 4))
  35. (assert (= (key-counter2) 5))
  36. (assert (= (key-counter1) 4))
  37. (assert (= (key-counter1) 5))
  38. ;; rest arguments will no be copied so we don't need to test them here