PasteRack.org
Paste # 87388
2023-11-18 18:22:23

Fork as a new paste.

Paste viewed 577 times.


Embed:

  1. #lang racket
  2. (define (outliers lon)
  3.   (local
  4.    [;; mean: (listof Num) -> Num
  5.     (define (mean lon)
  6.       (cond
  7.        [(empty? lon) 0]
  8.        [else (/ (+ (first lon) (mean (rest lon))) (length lon))]))
  9.  
  10.     ;; variance: (listof Num) -> Num
  11.     (define (variance lon)
  12.       (cond
  13.        [(empty? lon) 0]
  14.        [else (/ (+ (sqr (- (first lon) mean)) (variance (rest lon))) mean)]))
  15.  
  16.     ;; term: (listof Num) -> Num
  17.     (define (term lon) (sqr (- (first lon) mean)))]
  18.  
  19.   (cond
  20.     [(empty? lon) empty]
  21.     [(> term variance) (cons (first lon) (rest term))]
  22.     [else (rest outliers)])))
  23.  
  24. (outliers (list 2 1 34 3 1 0 33 2 2 1 34 3))

=>

>: contract violation

  expected: real?

  given: #<procedure:variance>