aboutsummaryrefslogtreecommitdiff
path: root/semestr-2/racket/cw.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'semestr-2/racket/cw.rkt')
-rw-r--r--semestr-2/racket/cw.rkt57
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