diff options
Diffstat (limited to 'semestr-2/racket/cw.rkt')
-rw-r--r-- | semestr-2/racket/cw.rkt | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/semestr-2/racket/cw.rkt b/semestr-2/racket/cw.rkt new file mode 100644 index 0000000..f1e706f --- /dev/null +++ b/semestr-2/racket/cw.rkt @@ -0,0 +1,57 @@ +#lang racket + +(define (accumulate op initial sequence) + (if (null? sequence) + initial + (op (car sequence) + (accumulate op initial (cdr sequence))))) + +(define (horner-eval x coefficient-sequence) + (accumulate (lambda (this-coeff higher-terms) + (+ this-coeff (* x higher-terms))) + 0 + coefficient-sequence)) + + +(define (accumulate-n op init seqs) + (if (null? (car seqs)) + null + (cons (accumulate op init (map car seqs)) + (accumulate-n op init (map cdr seqs))))) + +(define (count-leaves t) + (accumulate + 0 (map (lambda (x) + (if (not (pair? x)) + 1 + (count-leaves x))) t))) + +(define (flatmap proc seq) + (accumulate append null (map proc seq))) + +(define (prime? x) (= (modulo x 2) 1)) + +(define (prime-sum? pair) + (prime? (+ (car pair) (cadr pair)))) + +(define (make-pair-sum pair) + (list (car pair) (cadr pair) (+ (car pair) (cadr pair)))) + +(define (enumerate-interval low high) + (if (> low high) + null + (cons low (enumerate-interval (+ 1 low) high)))) + +(define (unique-pairs n) + (flatmap (lambda (i) + (map (lambda (j) (list j i)) + (enumerate-interval 1 (- i 1)))) + (enumerate-interval 1 n))) + +(define (prime-sum-pairs n) + (map make-pair-sum + (filter prime-sum? (unique-pairs n)))) + +(define (is-eq-s? s triplet) + (= s (accumulate + 0 triplet))) + +(define
\ No newline at end of file |