Advertisement
Guest User

Numbers

a guest
Nov 18th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 1.83 KB | None | 0 0
  1. #lang racket
  2. (require rackunit)
  3. (require rackunit/text-ui)
  4.  
  5. ; Искаме да дефинираме следните имена
  6.  
  7. ; one, two, three, four, five, six, seven, eight, nine, ten
  8. ; plus, minus, times, div
  9.  
  10. (define (make-number n)
  11.   ; Ламбда със случаен брой аргументи - отиват в xs.
  12.   (lambda xs
  13.     (if (null? xs)
  14.         n
  15.         ; Извикваме първия аргумент (plus (three)) например - той е функция
  16.         ; според дефиницията на make-operation
  17.         ((car xs) n))))
  18.  
  19. (define one (make-number 1))
  20. (define two (make-number 2))
  21. (define three (make-number 3))
  22. (define four (make-number 4))
  23. (define five (make-number 5))
  24. (define six (make-number 6))
  25. (define seven (make-number 7))
  26. (define eight (make-number 8))
  27. (define nine (make-number 9))
  28.  
  29. (define (make-operation op)
  30.   ; (plus (three)) - аргументът на тези функции (направените от make-operation) е вторият аргумент на цялата операция
  31.   (lambda (second-arg)
  32.     ; връщаме функция, която горе в цифрата извикваме със съответния first-arg
  33.     (lambda (first-arg) (op first-arg second-arg))))
  34.  
  35. (define plus (make-operation +))
  36. (define minus (make-operation -))
  37. (define times (make-operation *))
  38. (define div (make-operation quotient))
  39.  
  40.  
  41. ; Така че тестовете долу да минават.
  42.  
  43. (define tests
  44.   (test-suite "Numbers tests"
  45.     (check-equal? (one (plus (one))) 2)
  46.     (check-equal? (three (times (five))) 15)
  47.     (check-equal? (eight (div (two))) 4)
  48.     (check-equal? (seven (times (six))) 42)
  49.     (check-equal? (nine (minus (three))) 6)
  50.     ; Добави и за изваждане
  51.   )
  52. )
  53.  
  54. (run-tests tests 'verbose)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement