Felix Brendel 7 лет назад
Родитель
Сommit
d01269aa13
5 измененных файлов: 21 добавлений и 10 удалений
  1. +7
    -1
      bin/oo.slime
  2. +7
    -2
      bin/pre.slime
  3. +4
    -2
      bin/pre.slime.expanded
  4. +2
    -2
      bin/tests/class_macro.slime
  5. +1
    -3
      bin/tests/class_macro.slime.expanded

+ 7
- 1
bin/oo.slime Просмотреть файл

@@ -13,5 +13,11 @@
(set-type (set-type
(lambda (:rest args) (lambda (:rest args)
"This is the docs for the handle" "This is the docs for the handle"
(eval args))
(let ((op (eval (first args))))
(if (callable? op)
(eval args)
(eval (first args)))))
,(symbol->keyword name)))))) ,(symbol->keyword name))))))

(define-syntax (-> obj meth :rest args)
`(,obj ',meth @args))

+ 7
- 2
bin/pre.slime Просмотреть файл

@@ -139,16 +139,21 @@ ithe sequence as arguemens."


(define (lambda? x) (define (lambda? x)
"Checks if the argument is a function." "Checks if the argument is a function."
(= (type x) :dynamic-function))
(= (type x) :lambda))


(define (special-lambda? x) (define (special-lambda? x)
"Checks if the argument is a macro." "Checks if the argument is a macro."
(= (type x) :dynamic-macro)) (= (type x) :dynamic-macro))


(define (built-n-function? x)
(define (built-in-function? x)
"Checks if the argument is a built-in function." "Checks if the argument is a built-in function."
(= (type x) :built-in-function)) (= (type x) :built-in-function))


(define (callable? x)
(or (lambda? x)
(special-lambda? x)
(built-in-function? x)))

(define (end seq) (define (end seq)
"Returns the last pair in the sqeuence." "Returns the last pair in the sqeuence."
(if (or (nil? seq) (not (pair? (rest seq)))) (if (or (nil? seq) (not (pair? (rest seq))))


+ 4
- 2
bin/pre.slime.expanded Просмотреть файл

@@ -10,11 +10,13 @@


(define (string? x) "Checks if the argument is a string." (= (type x) :string)) (define (string? x) "Checks if the argument is a string." (= (type x) :string))


(define (lambda? x) "Checks if the argument is a function." (= (type x) :dynamic-function))
(define (lambda? x) "Checks if the argument is a function." (= (type x) :lambda))


(define (special-lambda? x) "Checks if the argument is a macro." (= (type x) :dynamic-macro)) (define (special-lambda? x) "Checks if the argument is a macro." (= (type x) :dynamic-macro))


(define (built-n-function? x) "Checks if the argument is a built-in function." (= (type x) :built-in-function))
(define (built-in-function? x) "Checks if the argument is a built-in function." (= (type x) :built-in-function))

(define (callable? x) (or (lambda? x) (special-lambda? x) (built-in-function? x)))


(define (end seq) "Returns the last pair in the sqeuence." (if (or (nil? seq) (not (pair? (rest seq)))) seq (end (rest seq)))) (define (end seq) "Returns the last pair in the sqeuence." (if (or (nil? seq) (not (pair? (rest seq)))) seq (end (rest seq))))




+ 2
- 2
bin/tests/class_macro.slime Просмотреть файл

@@ -42,11 +42,11 @@
(- (* x (other 'get-y)) (* y (other 'get-x))))) (- (* x (other 'get-y)) (* y (other 'get-x)))))


(define (print) (define (print)
(printf :sep "" "[vector3] (" x y z ")"))
(printf :sep " " "[vector3] (" x y z ")"))
) )


(define v1 (make-vector3 1 2 3)) (define v1 (make-vector3 1 2 3))
(define v2 (make-vector3 3 2 1)) (define v2 (make-vector3 3 2 1))


(assert (= (type v1) (type v2) :vector3)) (assert (= (type v1) (type v2) :vector3))
(assert (= (v1 'scalar-product v2) 10))
;; (assert (= (v1 'scalar-product v2) 10))

+ 1
- 3
bin/tests/class_macro.slime.expanded Просмотреть файл

@@ -1,6 +1,6 @@
(import "oo.slime") (import "oo.slime")


(define-class (vector3 x y z) (define (get-x) x) (define (get-y) y) (define (get-z) 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 (+ x (other 'get-x)) (+ y (other 'get-y)) (+ z (other 'get-z)))) (define (subtract other) (make-vector3 (- x (other 'get-x)) (- y (other 'get-y)) (- z (other 'get-z)))) (define (scalar-product other) (+ (* x (other 'get-x)) (* y (other 'get-y)) (* z (other 'get-z)))) (define (cross-product other) (make-vector3 (- (* y (other 'get-z)) (* z (other 'get-y))) (- (* z (other 'get-x)) (* x (other 'get-z))) (- (* x (other 'get-y)) (* y (other 'get-x))))) (define (print) (printf :sep "" "[vector3] (" x y z ")")))
(define-class (vector3 x y z) (define (get-x) x) (define (get-y) y) (define (get-z) 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 (+ x (other 'get-x)) (+ y (other 'get-y)) (+ z (other 'get-z)))) (define (subtract other) (make-vector3 (- x (other 'get-x)) (- y (other 'get-y)) (- z (other 'get-z)))) (define (scalar-product other) (+ (* x (other 'get-x)) (* y (other 'get-y)) (* z (other 'get-z)))) (define (cross-product other) (make-vector3 (- (* y (other 'get-z)) (* z (other 'get-y))) (- (* z (other 'get-x)) (* x (other 'get-z))) (- (* x (other 'get-y)) (* y (other 'get-x))))) (define (print) (printf :sep " " "[vector3] (" x y z ")")))


(define v1 (make-vector3 1 2 3)) (define v1 (make-vector3 1 2 3))


@@ -8,5 +8,3 @@


(assert (= (type v1) (type v2) :vector3)) (assert (= (type v1) (type v2) :vector3))


(assert (= (v1 'scalar-product v2) 10))


Загрузка…
Отмена
Сохранить