Advertisement
Guest User

Untitled

a guest
May 29th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 2.36 KB | None | 0 0
  1. #lang racket
  2.  
  3. ; 1. Kontrakt zależny sprawdzający poprawność procedury sqrt z wykładu
  4. (define/contract (dist x y)
  5.   (-> number? number? number?)
  6.   (abs (- x y)))
  7.  
  8. (define/contract (average x y)
  9.   (-> number? number? number?)
  10.   (/ (+ x y) 2))
  11.  
  12. (define/contract (square x)
  13.   (-> number? number?)
  14.   (* x x))
  15.  
  16. (define sqrt/c
  17.   (->i ([x positive?])
  18.        [result positive?]
  19.        #:post (x result)
  20.        (< (dist x (square result)) 0.0001)))
  21.  
  22. (define/contract (sqrt x)
  23.   sqrt/c
  24.   (define (improve approx)
  25.     (average (/ x approx) approx))
  26.   (define (good-enough? approx)
  27.     (< (dist x (square approx)) 0.0001))
  28.   (define (iter approx)
  29.     (cond
  30.       [(good-enough? approx) approx]
  31.       [else                  (iter (improve approx))]))
  32.   (iter 1.0))
  33.  
  34.  
  35. ; 2. Napisz kontrakty a)parametryczny oraz b)zależny dla procedury filter
  36. (define filter/c
  37.   (parametric->/c [a]
  38.                   (-> (-> a boolean?) (listof a) (listof a))))
  39.  
  40. (define filter-complex/c
  41.   (and/c
  42.   filter/c
  43.    (->i ([p? (-> any/c boolean?)]
  44.          [xs (listof any/c)])
  45.         [result (listof any/c)]
  46.         #:post
  47.         (p? result)
  48.         (andmap p? result))))
  49.  
  50. (define/contract (filter p xs)
  51.   filter-complex/c
  52.   (if (empty? xs)
  53.       '()
  54.       (if (not (p (car xs)))
  55.           (filter p (cdr xs))
  56.           (cons (car xs) (filter p (cdr xs))))))
  57.  
  58. ; 3. Napisz implementacje na liczbach całkowitych i listach interfejsu monoid
  59. (define-signature monoid^
  60.   ((contracted
  61.     [elem? (-> any/c boolean?)]
  62.     [neutral elem?]
  63.     [oper (-> elem? elem? elem?)])))
  64.  
  65. (define-unit monoid-integer@
  66.   (import)
  67.   (export monoid^)
  68.  
  69.   (define (elem? e)
  70.     (integer? e))
  71.  
  72.   (define neutral 0)
  73.  
  74.   (define (oper a b)
  75.     (+ a b)))
  76.  
  77. (define-unit monoid-list@
  78.   (import)
  79.   (export monoid^)
  80.  
  81.   (define (elem? e)
  82.     (list? e))
  83.  
  84.   (define neutral '())
  85.  
  86.   (define (oper a b)
  87.     (append a b)))
  88.  
  89. ; 5.
  90.  
  91. (define-signature integer-set^
  92.   ((contracted
  93.     [set? (-> any/c boolean?)]
  94.     [set-member? (-> e set? boolean?)]
  95.     [set-empty? (-> any/c boolean?)]
  96.     [empty-set (and/c set? set-empty?)]
  97.     [length (any/c number?)]
  98.     [singleton (and/c set? (not/c set-empty?)
  99.                       (->i (set any/c)
  100.                            [result set]
  101.                            #:post
  102.                            (= (length set) 1)))]
  103.     )))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement