Work transfer
This commit is contained in:
+101
-101
@@ -1,101 +1,101 @@
|
||||
(import "alist.slime")
|
||||
|
||||
(define a (ds::alist::make))
|
||||
;; a == (())
|
||||
|
||||
(assert (= (first a) ()))
|
||||
|
||||
(ds::alist::set! a 'key1 'value1)
|
||||
;; a == (key1: value1)
|
||||
|
||||
(assert (= (ds::alist::get a 'key1) 'value1))
|
||||
(assert (ds::alist::key-exists? a 'key1))
|
||||
(assert (not (ds::alist::key-exists? a 'key2)))
|
||||
|
||||
(ds::alist::set! a 'key2 'value2)
|
||||
;; a == (key2: value2,
|
||||
;; key1: value1)
|
||||
|
||||
(assert (= (ds::alist::get a 'key2) 'value2))
|
||||
(assert (ds::alist::key-exists? a 'key2))
|
||||
(assert (= (ds::alist::find a 'key2) 0))
|
||||
(assert (= (ds::alist::find a 'key1) 1))
|
||||
(assert (= (length (first a)) 2))
|
||||
|
||||
|
||||
(ds::alist::set! a 'key1 'value3)
|
||||
;; a == (key1: value3,
|
||||
;; key2: value2,
|
||||
;; key1: value1)
|
||||
|
||||
(assert (= (length (first a)) 3))
|
||||
(assert (= (ds::alist::get a 'key1) 'value3))
|
||||
|
||||
(ds::alist::set-overwrite! a 'key1 'value4)
|
||||
;; a == (key1: value4,
|
||||
;; key2: value2,
|
||||
;; key1: value1)
|
||||
|
||||
(assert (= (length (first a)) 3))
|
||||
(assert (= (ds::alist::get a 'key1) 'value4))
|
||||
|
||||
(ds::alist::remove! a 'key1)
|
||||
;; a == (key2: value2,
|
||||
;; key1: value1)
|
||||
|
||||
(assert (= (length (first a)) 2))
|
||||
(assert (= (ds::alist::get a 'key1) 'value1))
|
||||
(assert (= (ds::alist::get a 'key2) 'value2))
|
||||
|
||||
|
||||
;; -------------
|
||||
;;
|
||||
;; PLISTS
|
||||
;;
|
||||
;; -------------
|
||||
|
||||
(define p (ds::plist::make))
|
||||
;; p == (())
|
||||
|
||||
(assert (= (first p) ()))
|
||||
|
||||
(ds::plist::set! p :key1 'value1)
|
||||
;; p == ((:key1 value1))
|
||||
|
||||
(assert (= (ds::plist::get p :key1) 'value1))
|
||||
(assert (ds::plist::prop-exists? p :key1))
|
||||
(assert (not (ds::plist::prop-exists? p :key2)))
|
||||
|
||||
(ds::plist::set! p :key2 'value2)
|
||||
;; p == ((:key2 value2,
|
||||
;; :key1 value1))
|
||||
|
||||
(assert (= (ds::plist::get p :key2) 'value2))
|
||||
(assert (ds::plist::prop-exists? p :key2))
|
||||
(assert (= (ds::plist::find p :key2) 0))
|
||||
(assert (= (ds::plist::find p :key1) 1))
|
||||
(assert (= (length (first p)) 4))
|
||||
|
||||
(ds::plist::set! p :key1 'value3)
|
||||
;; p == ((:key1 value3,
|
||||
;; :key2 value2,
|
||||
;; :key1 value1))
|
||||
|
||||
(assert (= (length (first p)) 6))
|
||||
(assert (= (ds::plist::get p :key1) 'value3))
|
||||
|
||||
(ds::plist::set-overwrite! p :key1 'value4)
|
||||
;; p == ((:key1 value4,
|
||||
;; :key2 value2,
|
||||
;; :key1 value1))
|
||||
|
||||
;; (assert (= (length (first p)) 6))
|
||||
;; (assert (= (ds::plist::get p :key1) 'value4))
|
||||
|
||||
;; (ds::plist::remove! p :key1)
|
||||
;; ;; p == ((:key2 value2,
|
||||
;; ;; :key1 value1))
|
||||
|
||||
;; (assert (= (length (first p)) 4))
|
||||
;; (assert (= (ds::plist::get p :key1) 'value1))
|
||||
;; (assert (= (ds::plist::get p :key2) 'value2))
|
||||
(import "alist.slime")
|
||||
|
||||
(define a (ds::alist::make))
|
||||
;; a == (())
|
||||
|
||||
(assert (= (first a) ()))
|
||||
|
||||
(ds::alist::set! a 'key1 'value1)
|
||||
;; a == (key1: value1)
|
||||
|
||||
(assert (= (ds::alist::get a 'key1) 'value1))
|
||||
(assert (ds::alist::key-exists? a 'key1))
|
||||
(assert (not (ds::alist::key-exists? a 'key2)))
|
||||
|
||||
(ds::alist::set! a 'key2 'value2)
|
||||
;; a == (key2: value2,
|
||||
;; key1: value1)
|
||||
|
||||
(assert (= (ds::alist::get a 'key2) 'value2))
|
||||
(assert (ds::alist::key-exists? a 'key2))
|
||||
(assert (= (ds::alist::find a 'key2) 0))
|
||||
(assert (= (ds::alist::find a 'key1) 1))
|
||||
(assert (= (length (first a)) 2))
|
||||
|
||||
|
||||
(ds::alist::set! a 'key1 'value3)
|
||||
;; a == (key1: value3,
|
||||
;; key2: value2,
|
||||
;; key1: value1)
|
||||
|
||||
(assert (= (length (first a)) 3))
|
||||
(assert (= (ds::alist::get a 'key1) 'value3))
|
||||
|
||||
(ds::alist::set-overwrite! a 'key1 'value4)
|
||||
;; a == (key1: value4,
|
||||
;; key2: value2,
|
||||
;; key1: value1)
|
||||
|
||||
(assert (= (length (first a)) 3))
|
||||
(assert (= (ds::alist::get a 'key1) 'value4))
|
||||
|
||||
(ds::alist::remove! a 'key1)
|
||||
;; a == (key2: value2,
|
||||
;; key1: value1)
|
||||
|
||||
(assert (= (length (first a)) 2))
|
||||
(assert (= (ds::alist::get a 'key1) 'value1))
|
||||
(assert (= (ds::alist::get a 'key2) 'value2))
|
||||
|
||||
|
||||
;; -------------
|
||||
;;
|
||||
;; PLISTS
|
||||
;;
|
||||
;; -------------
|
||||
|
||||
(define p (ds::plist::make))
|
||||
;; p == (())
|
||||
|
||||
(assert (= (first p) ()))
|
||||
|
||||
(ds::plist::set! p :key1 'value1)
|
||||
;; p == ((:key1 value1))
|
||||
|
||||
(assert (= (ds::plist::get p :key1) 'value1))
|
||||
(assert (ds::plist::prop-exists? p :key1))
|
||||
(assert (not (ds::plist::prop-exists? p :key2)))
|
||||
|
||||
(ds::plist::set! p :key2 'value2)
|
||||
;; p == ((:key2 value2,
|
||||
;; :key1 value1))
|
||||
|
||||
(assert (= (ds::plist::get p :key2) 'value2))
|
||||
(assert (ds::plist::prop-exists? p :key2))
|
||||
(assert (= (ds::plist::find p :key2) 0))
|
||||
(assert (= (ds::plist::find p :key1) 1))
|
||||
(assert (= (length (first p)) 4))
|
||||
|
||||
(ds::plist::set! p :key1 'value3)
|
||||
;; p == ((:key1 value3,
|
||||
;; :key2 value2,
|
||||
;; :key1 value1))
|
||||
|
||||
(assert (= (length (first p)) 6))
|
||||
(assert (= (ds::plist::get p :key1) 'value3))
|
||||
|
||||
(ds::plist::set-overwrite! p :key1 'value4)
|
||||
;; p == ((:key1 value4,
|
||||
;; :key2 value2,
|
||||
;; :key1 value1))
|
||||
|
||||
;; (assert (= (length (first p)) 6))
|
||||
;; (assert (= (ds::plist::get p :key1) 'value4))
|
||||
|
||||
;; (ds::plist::remove! p :key1)
|
||||
;; ;; p == ((:key2 value2,
|
||||
;; ;; :key1 value1))
|
||||
|
||||
;; (assert (= (length (first p)) 4))
|
||||
;; (assert (= (ds::plist::get p :key1) 'value1))
|
||||
;; (assert (= (ds::plist::get p :key2) 'value2))
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
(import "oo.slime")
|
||||
|
||||
(define-class (vector3 x y z) (define (set-x new-x) (mutate x new-x)) (define (set-y new-y) (mutate y new-y)) (define (set-z new-z) (mutate z new-z)) (define (length) (** (+ (* x x) (* y y) (* z z)) 0.500000)) (define (scale fac) (mutate x (* fac x)) (mutate y (* fac y)) (mutate z (* fac z)) fac) (define (add other) (make-vector3 (+ (-> other x) x) (+ (-> other y) y) (+ (-> other z) z))) (define (subtract other) (make-vector3 (- (-> other x) x) (- (-> other y) y) (- (-> other z) z))) (define (equal? other) (and (= (-> other x) x) (= (-> other y) y) (= (-> other z) z))) (define (scalar-product other) (+ (* (-> other x) x) (* (-> other y) y) (* (-> other z) z))) (define (cross-product other) (make-vector3 (- (* (-> other z) y) (* (-> other y) z)) (- (* (-> other x) z) (* (-> other z) x)) (- (* (-> other y) x) (* (-> other x) y)))) (define (print) (printf :sep " " "[vector3] (" x y z ")")))
|
||||
|
||||
(define v1 (make-vector3 1 2 3))
|
||||
|
||||
(define v2 (make-vector3 3 2 1))
|
||||
|
||||
(assert (= (type v1) (type v2) :vector3))
|
||||
|
||||
(assert (= (v1 'scalar-product v2) 10))
|
||||
|
||||
(assert (-> (-> v1 cross-product v2) equal? (make-vector3 -4 8 -4)))
|
||||
|
||||
(import "oo.slime")
|
||||
|
||||
(define-class (vector3 x y z) (define (set-x new-x) (mutate x new-x)) (define (set-y new-y) (mutate y new-y)) (define (set-z new-z) (mutate z new-z)) (define (length) (** (+ (* x x) (* y y) (* z z)) 0.500000)) (define (scale fac) (mutate x (* fac x)) (mutate y (* fac y)) (mutate z (* fac z)) fac) (define (add other) (make-vector3 (+ (-> other x) x) (+ (-> other y) y) (+ (-> other z) z))) (define (subtract other) (make-vector3 (- (-> other x) x) (- (-> other y) y) (- (-> other z) z))) (define (equal? other) (and (= (-> other x) x) (= (-> other y) y) (= (-> other z) z))) (define (scalar-product other) (+ (* (-> other x) x) (* (-> other y) y) (* (-> other z) z))) (define (cross-product other) (make-vector3 (- (* (-> other z) y) (* (-> other y) z)) (- (* (-> other x) z) (* (-> other z) x)) (- (* (-> other y) x) (* (-> other x) y)))) (define (print) (printf :sep " " "[vector3] (" x y z ")")))
|
||||
|
||||
(define v1 (make-vector3 1 2 3))
|
||||
|
||||
(define v2 (make-vector3 3 2 1))
|
||||
|
||||
(assert (= (type v1) (type v2) :vector3))
|
||||
|
||||
(assert (= (v1 'scalar-product v2) 10))
|
||||
|
||||
(assert (-> (-> v1 cross-product v2) equal? (make-vector3 -4 8 -4)))
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
((lambda ((:k1 (+ 1 2 3)))
|
||||
(assert (= k1 6))))
|
||||
|
||||
((lambda ((:k1 ()))
|
||||
(when k1
|
||||
(assert ()))
|
||||
(assert (= k1 ()))))
|
||||
|
||||
(define (test)
|
||||
((lambda ()
|
||||
(define (a)
|
||||
:ok)
|
||||
(define (b (:k (begin (break) (a))))
|
||||
k)
|
||||
(b))))
|
||||
((lambda ((:k1 (+ 1 2 3)))
|
||||
(assert (= k1 6))))
|
||||
|
||||
((lambda ((:k1 ()))
|
||||
(when k1
|
||||
(assert ()))
|
||||
(assert (= k1 ()))))
|
||||
|
||||
(define (test)
|
||||
((lambda ()
|
||||
(define (a)
|
||||
:ok)
|
||||
(define (b (:k (begin (break) (a))))
|
||||
k)
|
||||
(b))))
|
||||
|
||||
+25
-25
@@ -1,25 +1,25 @@
|
||||
|
||||
(define hm1 (hash-map))
|
||||
|
||||
(hm/set! hm1 1 "a")
|
||||
(hm/set! hm1 "a" (lambda (x) (+ x 1)))
|
||||
|
||||
(assert (= ((hm/get hm1 (hm/get hm1 1)) 2) 3))
|
||||
|
||||
(define hm2 (hash-map))
|
||||
(hm/set! hm2 'yes :yes)
|
||||
(hm/set! hm2 :yes 'yes)
|
||||
|
||||
(assert (= (hm/get hm2 'yes) :yes))
|
||||
(assert (= (hm/get hm2 :yes) 'yes))
|
||||
(assert (= (hm/get hm2 (hm/get hm2 'yes)) 'yes))
|
||||
(assert (= (hm/get hm2 (hm/get hm2 :yes)) :yes))
|
||||
(assert (= (hm/get hm2 (hm/get hm2 (hm/get hm2 'yes))) :yes))
|
||||
(assert (= (hm/get hm2 (hm/get hm2 (hm/get hm2 :yes))) 'yes))
|
||||
|
||||
(define hm3 (hash-map))
|
||||
(hm/set! hm3 + 'plus)
|
||||
(hm/set! hm3 - 'minus)
|
||||
|
||||
(assert (= (hm/get hm3 +) 'plus))
|
||||
(assert (= (hm/get hm3 -) 'minus))
|
||||
|
||||
(define hm1 (hash-map))
|
||||
|
||||
(hm/set! hm1 1 "a")
|
||||
(hm/set! hm1 "a" (lambda (x) (+ x 1)))
|
||||
|
||||
(assert (= ((hm/get hm1 (hm/get hm1 1)) 2) 3))
|
||||
|
||||
(define hm2 (hash-map))
|
||||
(hm/set! hm2 'yes :yes)
|
||||
(hm/set! hm2 :yes 'yes)
|
||||
|
||||
(assert (= (hm/get hm2 'yes) :yes))
|
||||
(assert (= (hm/get hm2 :yes) 'yes))
|
||||
(assert (= (hm/get hm2 (hm/get hm2 'yes)) 'yes))
|
||||
(assert (= (hm/get hm2 (hm/get hm2 :yes)) :yes))
|
||||
(assert (= (hm/get hm2 (hm/get hm2 (hm/get hm2 'yes))) :yes))
|
||||
(assert (= (hm/get hm2 (hm/get hm2 (hm/get hm2 :yes))) 'yes))
|
||||
|
||||
(define hm3 (hash-map))
|
||||
(hm/set! hm3 + 'plus)
|
||||
(hm/set! hm3 - 'minus)
|
||||
|
||||
(assert (= (hm/get hm3 +) 'plus))
|
||||
(assert (= (hm/get hm3 -) 'minus))
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
(define a 1111)
|
||||
|
||||
(define (get-a-1) a)
|
||||
(define a 1111)
|
||||
|
||||
(define (get-a-1) a)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
(import "tests/import1.slime")
|
||||
|
||||
|
||||
(define (set-a-2 s)
|
||||
(set! a s))
|
||||
|
||||
(define (get-a-2) a)
|
||||
(import "tests/import1.slime")
|
||||
|
||||
|
||||
(define (set-a-2 s)
|
||||
(set! a s))
|
||||
|
||||
(define (get-a-2) a)
|
||||
|
||||
@@ -1,59 +1,59 @@
|
||||
;; regular arguments
|
||||
|
||||
(define (make-counter)
|
||||
(let ((var 0))
|
||||
(lambda ()
|
||||
(set! var (+ 1 var)))))
|
||||
|
||||
(define counter1 (make-counter))
|
||||
|
||||
(assert (= (counter1) 1))
|
||||
|
||||
(define counter2 (make-counter))
|
||||
|
||||
(assert (= (counter2) 1))
|
||||
|
||||
(assert (= (counter2) 2))
|
||||
(assert (= (counter1) 2))
|
||||
(assert (= (counter1) 3))
|
||||
(assert (= (counter2) 3))
|
||||
(assert (= (counter2) 4))
|
||||
(assert (= (counter2) 5))
|
||||
(assert (= (counter1) 4))
|
||||
(assert (= (counter1) 5))
|
||||
|
||||
(define (g)
|
||||
(define x 0)
|
||||
(lambda ()
|
||||
(define temp x)
|
||||
(mutate x (+ x 1))
|
||||
temp))
|
||||
|
||||
;; key arguments
|
||||
|
||||
(define (make-key-counter)
|
||||
((lambda (:var)
|
||||
(lambda ()
|
||||
(mutate var (+ 1 var))
|
||||
var))
|
||||
:var 0))
|
||||
|
||||
|
||||
(define key-counter1 (make-key-counter))
|
||||
|
||||
(assert (= (key-counter1) 1))
|
||||
|
||||
(define key-counter2 (make-key-counter))
|
||||
|
||||
(assert (= (key-counter2) 1))
|
||||
|
||||
(assert (= (key-counter2) 2))
|
||||
(assert (= (key-counter1) 2))
|
||||
(assert (= (key-counter1) 3))
|
||||
(assert (= (key-counter2) 3))
|
||||
(assert (= (key-counter2) 4))
|
||||
(assert (= (key-counter2) 5))
|
||||
(assert (= (key-counter1) 4))
|
||||
(assert (= (key-counter1) 5))
|
||||
|
||||
;; rest arguments will no be copied so we don't need to test them here
|
||||
;; regular arguments
|
||||
|
||||
(define (make-counter)
|
||||
(let ((var 0))
|
||||
(lambda ()
|
||||
(set! var (+ 1 var)))))
|
||||
|
||||
(define counter1 (make-counter))
|
||||
|
||||
(assert (= (counter1) 1))
|
||||
|
||||
(define counter2 (make-counter))
|
||||
|
||||
(assert (= (counter2) 1))
|
||||
|
||||
(assert (= (counter2) 2))
|
||||
(assert (= (counter1) 2))
|
||||
(assert (= (counter1) 3))
|
||||
(assert (= (counter2) 3))
|
||||
(assert (= (counter2) 4))
|
||||
(assert (= (counter2) 5))
|
||||
(assert (= (counter1) 4))
|
||||
(assert (= (counter1) 5))
|
||||
|
||||
(define (g)
|
||||
(define x 0)
|
||||
(lambda ()
|
||||
(define temp x)
|
||||
(mutate x (+ x 1))
|
||||
temp))
|
||||
|
||||
;; key arguments
|
||||
|
||||
(define (make-key-counter)
|
||||
((lambda (:var)
|
||||
(lambda ()
|
||||
(mutate var (+ 1 var))
|
||||
var))
|
||||
:var 0))
|
||||
|
||||
|
||||
(define key-counter1 (make-key-counter))
|
||||
|
||||
(assert (= (key-counter1) 1))
|
||||
|
||||
(define key-counter2 (make-key-counter))
|
||||
|
||||
(assert (= (key-counter2) 1))
|
||||
|
||||
(assert (= (key-counter2) 2))
|
||||
(assert (= (key-counter1) 2))
|
||||
(assert (= (key-counter1) 3))
|
||||
(assert (= (key-counter2) 3))
|
||||
(assert (= (key-counter2) 4))
|
||||
(assert (= (key-counter2) 5))
|
||||
(assert (= (key-counter1) 4))
|
||||
(assert (= (key-counter1) 5))
|
||||
|
||||
;; rest arguments will no be copied so we don't need to test them here
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
(define (make-counter) (let ((var 0)) (lambda () (set! var (+ 1 var)))))
|
||||
|
||||
(define counter1 (make-counter))
|
||||
|
||||
(assert (= (counter1) 1))
|
||||
|
||||
(define counter2 (make-counter))
|
||||
|
||||
(assert (= (counter2) 1))
|
||||
|
||||
(assert (= (counter2) 2))
|
||||
|
||||
(assert (= (counter1) 2))
|
||||
|
||||
(assert (= (counter1) 3))
|
||||
|
||||
(assert (= (counter2) 3))
|
||||
|
||||
(assert (= (counter2) 4))
|
||||
|
||||
(assert (= (counter2) 5))
|
||||
|
||||
(assert (= (counter1) 4))
|
||||
|
||||
(assert (= (counter1) 5))
|
||||
|
||||
(define (g) (define x 0) (lambda () (define temp x) (mutate x (+ x 1)) temp))
|
||||
|
||||
(define (make-key-counter) ((lambda (:var) (lambda () (mutate var (+ 1 var)) var)) :var 0))
|
||||
|
||||
(define key-counter1 (make-key-counter))
|
||||
|
||||
(assert (= (key-counter1) 1))
|
||||
|
||||
(define key-counter2 (make-key-counter))
|
||||
|
||||
(assert (= (key-counter2) 1))
|
||||
|
||||
(assert (= (key-counter2) 2))
|
||||
|
||||
(assert (= (key-counter1) 2))
|
||||
|
||||
(assert (= (key-counter1) 3))
|
||||
|
||||
(assert (= (key-counter2) 3))
|
||||
|
||||
(assert (= (key-counter2) 4))
|
||||
|
||||
(assert (= (key-counter2) 5))
|
||||
|
||||
(assert (= (key-counter1) 4))
|
||||
|
||||
(assert (= (key-counter1) 5))
|
||||
|
||||
(define (make-counter) (let ((var 0)) (lambda () (set! var (+ 1 var)))))
|
||||
|
||||
(define counter1 (make-counter))
|
||||
|
||||
(assert (= (counter1) 1))
|
||||
|
||||
(define counter2 (make-counter))
|
||||
|
||||
(assert (= (counter2) 1))
|
||||
|
||||
(assert (= (counter2) 2))
|
||||
|
||||
(assert (= (counter1) 2))
|
||||
|
||||
(assert (= (counter1) 3))
|
||||
|
||||
(assert (= (counter2) 3))
|
||||
|
||||
(assert (= (counter2) 4))
|
||||
|
||||
(assert (= (counter2) 5))
|
||||
|
||||
(assert (= (counter1) 4))
|
||||
|
||||
(assert (= (counter1) 5))
|
||||
|
||||
(define (g) (define x 0) (lambda () (define temp x) (mutate x (+ x 1)) temp))
|
||||
|
||||
(define (make-key-counter) ((lambda (:var) (lambda () (mutate var (+ 1 var)) var)) :var 0))
|
||||
|
||||
(define key-counter1 (make-key-counter))
|
||||
|
||||
(assert (= (key-counter1) 1))
|
||||
|
||||
(define key-counter2 (make-key-counter))
|
||||
|
||||
(assert (= (key-counter2) 1))
|
||||
|
||||
(assert (= (key-counter2) 2))
|
||||
|
||||
(assert (= (key-counter1) 2))
|
||||
|
||||
(assert (= (key-counter1) 3))
|
||||
|
||||
(assert (= (key-counter2) 3))
|
||||
|
||||
(assert (= (key-counter2) 4))
|
||||
|
||||
(assert (= (key-counter2) 5))
|
||||
|
||||
(assert (= (key-counter1) 4))
|
||||
|
||||
(assert (= (key-counter1) 5))
|
||||
|
||||
|
||||
+22
-13
@@ -1,13 +1,22 @@
|
||||
;; (define-module math
|
||||
;; :exports
|
||||
;; (pi tau pow sqrt)
|
||||
|
||||
;; (define pi 3.1415)
|
||||
;; (define tau (* 2 pi))
|
||||
;; (define (pow a b) (** a b))
|
||||
;; (define (sqrt a) (** a 0.5)))
|
||||
|
||||
;; (assert (= math::pi 3.1415))
|
||||
;; (assert (= math::tau (* 2 math::tau)))
|
||||
|
||||
(1 2 3)
|
||||
;; (define-module math
|
||||
;; :exports
|
||||
;; (pi tau pow sqrt)
|
||||
|
||||
;; (define pi 3.1415)
|
||||
;; (define tau (* 2 pi))
|
||||
;; (define (pow a b) (** a b))
|
||||
;; (define (sqrt a) (** a 0.5)))
|
||||
|
||||
;; (assert (= math::pi 3.1415))
|
||||
;; (assert (= math::tau (* 2 math::tau)))
|
||||
|
||||
|
||||
(tdefine-module 'math
|
||||
:exports
|
||||
'(pi tau pow sqrt)
|
||||
|
||||
'(define pi 3.1415)
|
||||
'(define tau (* 2 pi))
|
||||
'(define (pow a b) (** a b))
|
||||
'(define (sqrt a) (** a 0.5)))
|
||||
|
||||
|
||||
+348
-340
@@ -1,340 +1,348 @@
|
||||
;; (define (abs x)
|
||||
;; (cond ((< x 0) (- x))
|
||||
;; (else x)))
|
||||
|
||||
;; (assert (= (abs 1) 1))
|
||||
;; (assert (= (abs (- 2)) 2))
|
||||
|
||||
|
||||
(define (abs x)
|
||||
(if (< x 0)
|
||||
(- x)
|
||||
x))
|
||||
|
||||
;; (assert (= (abs 12) 12))
|
||||
;; (assert (= (abs (- 32)) 32))
|
||||
|
||||
|
||||
;; (define (>= x y)
|
||||
;; (or (> x y)
|
||||
;; (= x y)))
|
||||
|
||||
;; (assert (>= 2 2))
|
||||
;; (assert (>= 3 2))
|
||||
;; (assert (not (>= 1 2)))
|
||||
;; (assert (not (>= 12 44)))
|
||||
|
||||
|
||||
;; (define (>= x y)
|
||||
;; (not (< x y)))
|
||||
|
||||
;; (assert (>= 2 2))
|
||||
;; (assert (>= 3 2))
|
||||
;; (assert (not (>= 1 2)))
|
||||
;; (assert (not (>= 12 44)))
|
||||
|
||||
|
||||
;; (define (a-plus-abs-b a b)
|
||||
;; ((if (> b 0) + -) a b))
|
||||
|
||||
;; (assert (= (a-plus-abs-b 1 2) 3))
|
||||
;; (assert (= (a-plus-abs-b 1 -2) 3))
|
||||
|
||||
(define (square x) (* x x))
|
||||
(define (cube x) (* x x x))
|
||||
|
||||
;; (assert (= ((lambda (x y z)
|
||||
;; (+ x y (square z)))
|
||||
;; 1 2 3)
|
||||
;; 12))
|
||||
|
||||
;; ;;; --------------------
|
||||
;; ;;; newtons method
|
||||
;; ;;; --------------------
|
||||
|
||||
;; (define tolerance 0.001)
|
||||
|
||||
;; (define (square x)
|
||||
;; (* x x))
|
||||
|
||||
(define (average x y)
|
||||
(/ (+ x y) 2))
|
||||
|
||||
;; (define (improve guess x)
|
||||
;; (average guess (/ x guess)))
|
||||
|
||||
;; (define (good-enough? guess x)
|
||||
;; (< (abs (- (square guess) x)) tolerance))
|
||||
|
||||
;; (define (sqrt-iter guess x)
|
||||
;; (if (good-enough? guess x)
|
||||
;; guess
|
||||
;; (sqrt-iter (improve guess x) x)))
|
||||
|
||||
;; (define (sqrt x)
|
||||
;; (sqrt-iter 1.0 x))
|
||||
|
||||
;; (define (sqrt2 x)
|
||||
;; (define (good-enough? guess x)
|
||||
;; (< (abs (- (square guess) x)) 0.001))
|
||||
|
||||
;; (define (improve guess x)
|
||||
;; (average guess (/ x guess)))
|
||||
|
||||
;; (define (sqrt-iter guess x)
|
||||
;; (if (good-enough? guess x)
|
||||
;; guess
|
||||
;; (sqrt-iter (improve guess x) x)))
|
||||
|
||||
;; (sqrt-iter 1.0 x))
|
||||
|
||||
;; (define (sqrt3 x)
|
||||
;; (define (good-enough? guess)
|
||||
;; (< (abs (- (square guess) x)) 0.001))
|
||||
|
||||
;; (define (improve guess)
|
||||
;; (average guess (/ x guess)))
|
||||
|
||||
;; (define (sqrt-iter guess)
|
||||
;; (if (good-enough? guess)
|
||||
;; guess
|
||||
;; (sqrt-iter (improve guess))))
|
||||
|
||||
;; (sqrt-iter 1.0))
|
||||
|
||||
;; (assert (< (abs (- 3 (sqrt 9))) tolerance))
|
||||
;; (assert (< (abs (- 4 (sqrt 16))) tolerance))
|
||||
;; (assert (not (< (abs (- 4 (sqrt 15))) tolerance)))
|
||||
|
||||
;; (assert (< (abs (- 3 (sqrt2 9))) tolerance))
|
||||
;; (assert (< (abs (- 4 (sqrt2 16))) tolerance))
|
||||
;; (assert (not (< (abs (- 4 (sqrt2 15))) tolerance)))
|
||||
|
||||
;; (assert (< (abs (- 3 (sqrt3 9))) tolerance))
|
||||
;; (assert (< (abs (- 4 (sqrt3 16))) tolerance))
|
||||
;; (assert (not (< (abs (- 4 (sqrt3 15))) tolerance)))
|
||||
|
||||
|
||||
;; ;;; -----------------
|
||||
;; ;;; factorial
|
||||
;; ;;; -----------------
|
||||
|
||||
(define (factorial n)
|
||||
(if (= n 1)
|
||||
1
|
||||
(* n (factorial (- n 1)))))
|
||||
|
||||
(define (factorial2 n)
|
||||
(fact-iter 1 1 n))
|
||||
|
||||
(define (fact-iter product counter max-count)
|
||||
(if (> counter max-count)
|
||||
product
|
||||
(fact-iter (* counter product) (+ counter 1) max-count)))
|
||||
|
||||
(define (factorial3 n)
|
||||
(define (iter product counter)
|
||||
(if (> counter n)
|
||||
product
|
||||
(iter (* counter product) (+ counter 1))))
|
||||
|
||||
(iter 1 1))
|
||||
|
||||
(assert (= (factorial 6) 720))
|
||||
(assert (= (factorial2 6) 720))
|
||||
(assert (= (factorial3 6) 720))
|
||||
|
||||
;;; ----------------
|
||||
;;; ackermann
|
||||
;;; ----------------
|
||||
|
||||
(define (A m n)
|
||||
(cond ((= m 0) (+ n 1))
|
||||
((= n 0) (A (- m 1) 1))
|
||||
(else (A (- m 1) (A m (- n 1))))))
|
||||
|
||||
(assert (= (A 0 0) 1))
|
||||
(assert (= (A 1 2) 4))
|
||||
(assert (= (A 3 1) 13))
|
||||
|
||||
|
||||
;; ;;; ---------------
|
||||
;; ;;; Fibonacci
|
||||
;; ;;; ---------------
|
||||
|
||||
;; (define (fib n)
|
||||
;; (cond ((= n 0) 0)
|
||||
;; ((= n 1) 1)
|
||||
;; (else (+ (fib (- n 1)) (fib (- n 2))))))
|
||||
|
||||
;; (define (fib2 n)
|
||||
;; (fib-iter 1 0 n))
|
||||
|
||||
;; (define (fib-iter a b count)
|
||||
;; (if (= count 0)
|
||||
;; b
|
||||
;; (fib-iter (+ a b) a (- count 1))))
|
||||
|
||||
;; (assert (= (fib 2) 1))
|
||||
;; (assert (= (fib 3) 2))
|
||||
;; (assert (= (fib 4) 3))
|
||||
;; (assert (= (fib 5) 5))
|
||||
;; (assert (= (fib 6) 8))
|
||||
|
||||
;; (assert (= (fib2 2) 1))
|
||||
;; (assert (= (fib2 3) 2))
|
||||
;; (assert (= (fib2 4) 3))
|
||||
;; (assert (= (fib2 5) 5))
|
||||
;; (assert (= (fib2 6) 8))
|
||||
|
||||
;; ;;; ------------------
|
||||
;; ;;; count change
|
||||
;; ;;; ------------------
|
||||
|
||||
;; (define (count-change amount)
|
||||
;; (define (cc amount kinds-of-coins)
|
||||
;; (cond ((= amount 0) 1)
|
||||
;; ((or (< amount 0) (= kinds-of-coins 0)) 0)
|
||||
;; (else (+ (cc amount (- kinds-of-coins 1))
|
||||
;; (cc (- amount (first-denomination kinds-of-coins)) kinds-of-coins)))))
|
||||
|
||||
;; (define (first-denomination kinds-of-coins)
|
||||
;; (cond ((= kinds-of-coins 1) 1)
|
||||
;; ((= kinds-of-coins 2) 5)
|
||||
;; ((= kinds-of-coins 3) 10)
|
||||
;; ((= kinds-of-coins 4) 25)
|
||||
;; ((= kinds-of-coins 5) 50)))
|
||||
|
||||
;; (cc amount 5))
|
||||
|
||||
;; (assert (= (count-change 100) 292))
|
||||
|
||||
;; ;;; --------------------
|
||||
;; ;;; exponentiation
|
||||
;; ;;; --------------------
|
||||
|
||||
;; (define (expt b n)
|
||||
;; (if (= n 0)
|
||||
;; 1
|
||||
;; (* b (expt b (- n 1)))))
|
||||
|
||||
;; (define (expt2 b n)
|
||||
;; (define (expt-iter b counter product)
|
||||
;; (if (= counter 0)
|
||||
;; product
|
||||
;; (expt-iter b (- counter 1) (* b product))))
|
||||
|
||||
;; (expt-iter b n 1))
|
||||
|
||||
;; (define (fast-expt b n)
|
||||
;; (define (even? n)
|
||||
;; (= (% n 2) 0))
|
||||
|
||||
;; (cond ((= n 0) 1)
|
||||
;; ((even? n) (square (fast-expt b (/ n 2))))
|
||||
;; (else (* b (fast-expt b (- n 1))))))
|
||||
|
||||
;; (assert (= (expt 1 2) 1))
|
||||
;; (assert (= (expt 2 2) 4))
|
||||
;; (assert (= (expt 2 3) 8))
|
||||
|
||||
;; (assert (= (expt2 1 2) 1))
|
||||
;; (assert (= (expt2 2 2) 4))
|
||||
;; (assert (= (expt2 2 3) 8))
|
||||
|
||||
;; (assert (= (fast-expt 1 2) 1))
|
||||
;; (assert (= (fast-expt 2 2) 4))
|
||||
;; (assert (= (fast-expt 2 3) 8))
|
||||
|
||||
;; ;;; ----------
|
||||
;; ;;; gcd
|
||||
;; ;;; ----------
|
||||
|
||||
;; (define (gcd a b)
|
||||
;; (if (= b 0)
|
||||
;; a
|
||||
;; (gcd b (% a b))))
|
||||
|
||||
;; (assert (= (gcd 40 6) 2))
|
||||
;; (assert (= (gcd 13 4) 1))
|
||||
|
||||
|
||||
;; ;;; ----------
|
||||
;; ;;; primes
|
||||
;; ;;; ----------
|
||||
|
||||
;; (define (smallest-divisor n)
|
||||
;; (find-divisor n 2))
|
||||
|
||||
;; (define (find-divisor n test-divisor)
|
||||
;; (cond ((> (square test-divisor) n) n)
|
||||
;; ((divides? test-divisor n) test-divisor)
|
||||
;; (else (find-divisor n (+ test-divisor 1)))))
|
||||
|
||||
;; (define (divides? a b)
|
||||
;; (= (% b a) 0))
|
||||
|
||||
;; (define (prime? n)
|
||||
;; (= n (smallest-divisor n)))
|
||||
|
||||
;; (assert (prime? 13))
|
||||
;; (assert (prime? 11))
|
||||
;; (assert (not (prime? 12)))
|
||||
|
||||
|
||||
;;; ----------------------
|
||||
;;; simple integral
|
||||
;;; ----------------------
|
||||
|
||||
;; (define (sum term a next b)
|
||||
;; (if (> a b)
|
||||
;; 0
|
||||
;; (+ (term a) (sum term (next a) next b))))
|
||||
|
||||
;; (define (integral f a b dx)
|
||||
;; (define (add-dx x) (+ x dx))
|
||||
;; (* (sum f (+ a (/ dx 2.0)) add-dx b) dx))
|
||||
|
||||
;; (define (pi-sum a b)
|
||||
;; (define (pi-term x) (/ 1.0 (* x (+ x 2))))
|
||||
;; (define (pi-next x) (+ x 4))
|
||||
;; (sum pi-term a pi-next b))
|
||||
|
||||
;; (assert (< (abs (- (* 8 (pi-sum 1 100)) 3.121595)) 0.0001))
|
||||
;; (assert (< (abs (- (integral cube 0 1 0.02) 0.249950)) 0.0001))
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; F(x,y) = x(1 + xy)^2 + y(1 − y) + (1 + xy)(1 − y)
|
||||
;; ------------------------------------------------------------
|
||||
|
||||
;; (define (f x y)
|
||||
;; (let ((a (+ 1 (* x y)))
|
||||
;; (b (- 1 y)))
|
||||
;; (+ (* x (square a))
|
||||
;; (* y b)
|
||||
;; (* a b))))
|
||||
|
||||
;; (assert (= (f 0 0) 1))
|
||||
;; (assert (= (f 1 1) 4))
|
||||
|
||||
|
||||
;; ;;; ---------------
|
||||
;; ;;; find zero
|
||||
;; ;;; ---------------
|
||||
|
||||
;; (define (positive? x) (< 0 x))
|
||||
;; (define (negative? x) (< x 0))
|
||||
|
||||
;; (define (search f neg-point pos-point)
|
||||
;; (let ((midpoint (average neg-point pos-point)))
|
||||
;; (if (close-enough? neg-point pos-point)
|
||||
;; midpoint
|
||||
;; (let ((test-value (f midpoint)))
|
||||
;; (cond ((positive? test-value) (search f neg-point midpoint))
|
||||
;; ((negative? test-value) (search f midpoint pos-point))
|
||||
;; (else midpoint))))))
|
||||
|
||||
;; (define (close-enough? x y) (< (abs (- x y)) 0.001))
|
||||
|
||||
;; (assert (close-enough? (search (lambda (x) (- 1 (square x))) -3 3) -1))
|
||||
|
||||
;; (define (abs x)
|
||||
;; (cond ((< x 0) (- x))
|
||||
;; (else x)))
|
||||
|
||||
;; (assert (= (abs 1) 1))
|
||||
;; (assert (= (abs (- 2)) 2))
|
||||
|
||||
|
||||
;; (define (abs x)
|
||||
;; (if (< x 0)
|
||||
;; (- x)
|
||||
;; x))
|
||||
|
||||
;; (assert (= (abs 12) 12))
|
||||
;; (assert (= (abs (- 32)) 32))
|
||||
|
||||
|
||||
;; (define (>= x y)
|
||||
;; (or (> x y)
|
||||
;; (= x y)))
|
||||
|
||||
;; (assert (>= 2 2))
|
||||
;; (assert (>= 3 2))
|
||||
;; (assert (not (>= 1 2)))
|
||||
;; (assert (not (>= 12 44)))
|
||||
|
||||
|
||||
;; (define (>= x y)
|
||||
;; (not (< x y)))
|
||||
|
||||
;; (assert (>= 2 2))
|
||||
;; (assert (>= 3 2))
|
||||
;; (assert (not (>= 1 2)))
|
||||
;; (assert (not (>= 12 44)))
|
||||
|
||||
|
||||
;; (define (a-plus-abs-b a b)
|
||||
;; ((if (> b 0) + -) a b))
|
||||
|
||||
;; (assert (= (a-plus-abs-b 1 2) 3))
|
||||
;; (assert (= (a-plus-abs-b 1 -2) 3))
|
||||
|
||||
;; (define (square x) (* x x))
|
||||
;; (define (cube x) (* x x x))
|
||||
|
||||
;; (assert (= ((lambda (x y z)
|
||||
;; (+ x y (square z)))
|
||||
;; 1 2 3)
|
||||
;; 12))
|
||||
|
||||
;; ;;; --------------------
|
||||
;; ;;; newtons method
|
||||
;; ;;; --------------------
|
||||
|
||||
;; (define tolerance 0.001)
|
||||
|
||||
;; (define (square x)
|
||||
;; (* x x))
|
||||
|
||||
;; (define (average x y)
|
||||
;; (/ (+ x y) 2))
|
||||
|
||||
;; (define (improve guess x)
|
||||
;; (average guess (/ x guess)))
|
||||
|
||||
;; (define (good-enough? guess x)
|
||||
;; (< (abs (- (square guess) x)) tolerance))
|
||||
|
||||
;; (define (sqrt-iter guess x)
|
||||
;; (if (good-enough? guess x)
|
||||
;; guess
|
||||
;; (sqrt-iter (improve guess x) x)))
|
||||
|
||||
;; (define (sqrt x)
|
||||
;; (sqrt-iter 1.0 x))
|
||||
|
||||
;; (define (sqrt2 x)
|
||||
;; (define (good-enough? guess x)
|
||||
;; (< (abs (- (square guess) x)) 0.001))
|
||||
|
||||
;; (define (improve guess x)
|
||||
;; (average guess (/ x guess)))
|
||||
|
||||
;; (define (sqrt-iter guess x)
|
||||
;; (if (good-enough? guess x)
|
||||
;; guess
|
||||
;; (sqrt-iter (improve guess x) x)))
|
||||
|
||||
;; (sqrt-iter 1.0 x))
|
||||
|
||||
;; (define (sqrt3 x)
|
||||
;; (define (good-enough? guess)
|
||||
;; (< (abs (- (square guess) x)) 0.001))
|
||||
|
||||
;; (define (improve guess)
|
||||
;; (average guess (/ x guess)))
|
||||
|
||||
;; (define (sqrt-iter guess)
|
||||
;; (if (good-enough? guess)
|
||||
;; guess
|
||||
;; (sqrt-iter (improve guess))))
|
||||
|
||||
;; (sqrt-iter 1.0))
|
||||
|
||||
;; (assert (< (abs (- 3 (sqrt 9))) tolerance))
|
||||
;; (assert (< (abs (- 4 (sqrt 16))) tolerance))
|
||||
;; (assert (not (< (abs (- 4 (sqrt 15))) tolerance)))
|
||||
|
||||
;; (assert (< (abs (- 3 (sqrt2 9))) tolerance))
|
||||
;; (assert (< (abs (- 4 (sqrt2 16))) tolerance))
|
||||
;; (assert (not (< (abs (- 4 (sqrt2 15))) tolerance)))
|
||||
|
||||
;; (assert (< (abs (- 3 (sqrt3 9))) tolerance))
|
||||
;; (assert (< (abs (- 4 (sqrt3 16))) tolerance))
|
||||
;; (assert (not (< (abs (- 4 (sqrt3 15))) tolerance)))
|
||||
|
||||
|
||||
;; ;;; -----------------
|
||||
;; ;;; factorial
|
||||
;; ;;; -----------------
|
||||
|
||||
;; (define (factorial n)
|
||||
;; (if (= n 1)
|
||||
;; 1
|
||||
;; (* n (factorial (- n 1)))))
|
||||
|
||||
;; (define (factorial2 n)
|
||||
;; (fact-iter 1 1 n))
|
||||
|
||||
;; (define (fact-iter product counter max-count)
|
||||
;; (if (> counter max-count)
|
||||
;; product
|
||||
;; (fact-iter (* counter product) (+ counter 1) max-count)))
|
||||
|
||||
;; (define (factorial3 n)
|
||||
;; (define (iter product counter)
|
||||
;; (if (> counter n)
|
||||
;; product
|
||||
;; (iter (* counter product) (+ counter 1))))
|
||||
|
||||
;; (iter 1 1))
|
||||
|
||||
;; (assert (= (factorial 6) 720))
|
||||
;; (assert (= (factorial2 6) 720))
|
||||
;; (assert (= (factorial3 6) 720))
|
||||
|
||||
;;; ----------------
|
||||
;;; ackermann
|
||||
;;; ----------------
|
||||
|
||||
(define (A m n)
|
||||
(cond ((= m 0) (+ n 1))
|
||||
((= n 0) (A (- m 1) 1))
|
||||
(else (A (- m 1) (A m (- n 1))))))
|
||||
|
||||
;; (define (A m n)
|
||||
;; (if (= m 0)
|
||||
;; (+ n 1)
|
||||
;; (if (= n 0)
|
||||
;; (A (- m 1) 1)
|
||||
;; (A (- m 1) (A m (- n 1))))))
|
||||
|
||||
(assert (= (A 0 0) 1))
|
||||
(assert (= (A 1 2) 4))
|
||||
(assert (= (A 3 1) 13))
|
||||
|
||||
|
||||
;; ;;; ---------------
|
||||
;; ;;; Fibonacci
|
||||
;; ;;; ---------------
|
||||
|
||||
;; (define (fib n)
|
||||
;; (cond ((= n 0) 0)
|
||||
;; ((= n 1) 1)
|
||||
;; (else (+ (fib (- n 1)) (fib (- n 2))))))
|
||||
|
||||
;; (define (fib2 n)
|
||||
;; (fib-iter 1 0 n))
|
||||
|
||||
;; (define (fib-iter a b count)
|
||||
;; (if (= count 0)
|
||||
;; b
|
||||
;; (fib-iter (+ a b) a (- count 1))))
|
||||
|
||||
;; (assert (= (fib 2) 1))
|
||||
;; (assert (= (fib 3) 2))
|
||||
;; (assert (= (fib 4) 3))
|
||||
;; (assert (= (fib 5) 5))
|
||||
;; (assert (= (fib 6) 8))
|
||||
|
||||
;; (assert (= (fib2 2) 1))
|
||||
;; (assert (= (fib2 3) 2))
|
||||
;; (assert (= (fib2 4) 3))
|
||||
;; (assert (= (fib2 5) 5))
|
||||
;; (assert (= (fib2 6) 8))
|
||||
|
||||
;; ;;; ------------------
|
||||
;; ;;; count change
|
||||
;; ;;; ------------------
|
||||
|
||||
;; (define (count-change amount)
|
||||
;; (define (cc amount kinds-of-coins)
|
||||
;; (cond ((= amount 0) 1)
|
||||
;; ((or (< amount 0) (= kinds-of-coins 0)) 0)
|
||||
;; (else (+ (cc amount (- kinds-of-coins 1))
|
||||
;; (cc (- amount (first-denomination kinds-of-coins)) kinds-of-coins)))))
|
||||
|
||||
;; (define (first-denomination kinds-of-coins)
|
||||
;; (cond ((= kinds-of-coins 1) 1)
|
||||
;; ((= kinds-of-coins 2) 5)
|
||||
;; ((= kinds-of-coins 3) 10)
|
||||
;; ((= kinds-of-coins 4) 25)
|
||||
;; ((= kinds-of-coins 5) 50)))
|
||||
|
||||
;; (cc amount 5))
|
||||
|
||||
;; (assert (= (count-change 100) 292))
|
||||
|
||||
;; ;;; --------------------
|
||||
;; ;;; exponentiation
|
||||
;; ;;; --------------------
|
||||
|
||||
;; (define (expt b n)
|
||||
;; (if (= n 0)
|
||||
;; 1
|
||||
;; (* b (expt b (- n 1)))))
|
||||
|
||||
;; (define (expt2 b n)
|
||||
;; (define (expt-iter b counter product)
|
||||
;; (if (= counter 0)
|
||||
;; product
|
||||
;; (expt-iter b (- counter 1) (* b product))))
|
||||
|
||||
;; (expt-iter b n 1))
|
||||
|
||||
;; (define (fast-expt b n)
|
||||
;; (define (even? n)
|
||||
;; (= (% n 2) 0))
|
||||
|
||||
;; (cond ((= n 0) 1)
|
||||
;; ((even? n) (square (fast-expt b (/ n 2))))
|
||||
;; (else (* b (fast-expt b (- n 1))))))
|
||||
|
||||
;; (assert (= (expt 1 2) 1))
|
||||
;; (assert (= (expt 2 2) 4))
|
||||
;; (assert (= (expt 2 3) 8))
|
||||
|
||||
;; (assert (= (expt2 1 2) 1))
|
||||
;; (assert (= (expt2 2 2) 4))
|
||||
;; (assert (= (expt2 2 3) 8))
|
||||
|
||||
;; (assert (= (fast-expt 1 2) 1))
|
||||
;; (assert (= (fast-expt 2 2) 4))
|
||||
;; (assert (= (fast-expt 2 3) 8))
|
||||
|
||||
;; ;;; ----------
|
||||
;; ;;; gcd
|
||||
;; ;;; ----------
|
||||
|
||||
;; (define (gcd a b)
|
||||
;; (if (= b 0)
|
||||
;; a
|
||||
;; (gcd b (% a b))))
|
||||
|
||||
;; (assert (= (gcd 40 6) 2))
|
||||
;; (assert (= (gcd 13 4) 1))
|
||||
|
||||
|
||||
;; ;;; ----------
|
||||
;; ;;; primes
|
||||
;; ;;; ----------
|
||||
|
||||
;; (define (smallest-divisor n)
|
||||
;; (find-divisor n 2))
|
||||
|
||||
;; (define (find-divisor n test-divisor)
|
||||
;; (cond ((> (square test-divisor) n) n)
|
||||
;; ((divides? test-divisor n) test-divisor)
|
||||
;; (else (find-divisor n (+ test-divisor 1)))))
|
||||
|
||||
;; (define (divides? a b)
|
||||
;; (= (% b a) 0))
|
||||
|
||||
;; (define (prime? n)
|
||||
;; (= n (smallest-divisor n)))
|
||||
|
||||
;; (assert (prime? 13))
|
||||
;; (assert (prime? 11))
|
||||
;; (assert (not (prime? 12)))
|
||||
|
||||
|
||||
;;; ----------------------
|
||||
;;; simple integral
|
||||
;;; ----------------------
|
||||
|
||||
;; (define (sum term a next b)
|
||||
;; (if (> a b)
|
||||
;; 0
|
||||
;; (+ (term a) (sum term (next a) next b))))
|
||||
|
||||
;; (define (integral f a b dx)
|
||||
;; (define (add-dx x) (+ x dx))
|
||||
;; (* (sum f (+ a (/ dx 2.0)) add-dx b) dx))
|
||||
|
||||
;; (define (pi-sum a b)
|
||||
;; (define (pi-term x) (/ 1.0 (* x (+ x 2))))
|
||||
;; (define (pi-next x) (+ x 4))
|
||||
;; (sum pi-term a pi-next b))
|
||||
|
||||
;; (assert (< (abs (- (* 8 (pi-sum 1 100)) 3.121595)) 0.0001))
|
||||
;; (assert (< (abs (- (integral cube 0 1 0.02) 0.249950)) 0.0001))
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; F(x,y) = x(1 + xy)^2 + y(1 − y) + (1 + xy)(1 − y)
|
||||
;; ------------------------------------------------------------
|
||||
|
||||
;; (define (f x y)
|
||||
;; (let ((a (+ 1 (* x y)))
|
||||
;; (b (- 1 y)))
|
||||
;; (+ (* x (square a))
|
||||
;; (* y b)
|
||||
;; (* a b))))
|
||||
|
||||
;; (assert (= (f 0 0) 1))
|
||||
;; (assert (= (f 1 1) 4))
|
||||
|
||||
|
||||
;; ;;; ---------------
|
||||
;; ;;; find zero
|
||||
;; ;;; ---------------
|
||||
|
||||
;; (define (positive? x) (< 0 x))
|
||||
;; (define (negative? x) (< x 0))
|
||||
|
||||
;; (define (search f neg-point pos-point)
|
||||
;; (let ((midpoint (average neg-point pos-point)))
|
||||
;; (if (close-enough? neg-point pos-point)
|
||||
;; midpoint
|
||||
;; (let ((test-value (f midpoint)))
|
||||
;; (cond ((positive? test-value) (search f neg-point midpoint))
|
||||
;; ((negative? test-value) (search f midpoint pos-point))
|
||||
;; (else midpoint))))))
|
||||
|
||||
;; (define (close-enough? x y) (< (abs (- x y)) 0.001))
|
||||
|
||||
;; (assert (close-enough? (search (lambda (x) (- 1 (square x))) -3 3) -1))
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
;;
|
||||
;; let testing
|
||||
;;
|
||||
(assert (not (bound? var1)))
|
||||
(assert (not (bound? var2)))
|
||||
(assert (not (bound? var3)))
|
||||
(let ((var1 1)
|
||||
(var2 [1 2 3])
|
||||
(var3 {1 2 3 4}))
|
||||
(assert (bound? var1))
|
||||
(assert (bound? var2))
|
||||
(assert (bound? var3))
|
||||
(assert (= var1 1))
|
||||
(assert (= var2 [1 2 3]))
|
||||
(assert (= var3 {1 2 3 4})))
|
||||
|
||||
(assert (not (bound? var1)))
|
||||
(assert (not (bound? var2)))
|
||||
(assert (not (bound? var3)))
|
||||
|
||||
(assert (= (let ((val 'sym))
|
||||
val)
|
||||
'sym))
|
||||
|
||||
(assert (= (let ()
|
||||
'sym)
|
||||
'sym))
|
||||
;;
|
||||
;; Quasiquote testing
|
||||
;;
|
||||
(assert (= '() `()))
|
||||
|
||||
(assert (= '(1 1 2)
|
||||
`(1 1 2)))
|
||||
|
||||
(assert (= '(1 1 2)
|
||||
`(1 ,1 2)))
|
||||
|
||||
(assert (= '(1 1 2)
|
||||
`(1 ,(- 10 9) 2)))
|
||||
|
||||
(assert (= '(1 1 2)
|
||||
`(1 ,@(list 1 2))))
|
||||
|
||||
(let ((body '(2 3)))
|
||||
(assert (= '(1 2 3)
|
||||
`(1 ,@body))))
|
||||
|
||||
(let ((body '((define a 1)
|
||||
(define b 2)))
|
||||
(imports '()))
|
||||
(let ((expr `(begin ,@(map (lambda (x) `(import ,x)) imports) ,@body)))
|
||||
(assert (= '(begin
|
||||
(define a 1)
|
||||
(define b 2))))
|
||||
(eval expr)
|
||||
(assert (= a 1))
|
||||
(assert (= b 2))))
|
||||
@@ -1,20 +1,20 @@
|
||||
(import "tests/import1.slime")
|
||||
|
||||
(assert (= a 1111))
|
||||
(assert (= (get-a-1) 1111))
|
||||
|
||||
|
||||
(import "tests/import2.slime")
|
||||
|
||||
|
||||
(assert (= a 1111))
|
||||
(assert (= (get-a-1) 1111))
|
||||
(assert (= (get-a-2) 1111))
|
||||
|
||||
(set-a-2 11)
|
||||
|
||||
(assert (= a 11))
|
||||
|
||||
(assert (= (get-a-1) 11))
|
||||
|
||||
(assert (= (get-a-2) 11))
|
||||
(import "tests/import1.slime")
|
||||
|
||||
(assert (= a 1111))
|
||||
(assert (= (get-a-1) 1111))
|
||||
|
||||
|
||||
(import "tests/import2.slime")
|
||||
|
||||
|
||||
(assert (= a 1111))
|
||||
(assert (= (get-a-1) 1111))
|
||||
(assert (= (get-a-2) 1111))
|
||||
|
||||
(set-a-2 11)
|
||||
|
||||
(assert (= a 11))
|
||||
|
||||
(assert (= (get-a-1) 11))
|
||||
|
||||
(assert (= (get-a-2) 11))
|
||||
|
||||
Reference in New Issue
Block a user