;;;; decons (defpackage :decons (:use :common-lisp) (:local-nicknames (:util :scopes/util)) (:export #:*pi* #:area #:circle #:absv #:double #:remainder #:line )) (in-package :decons) ;;;; basic explorations (defconstant *pi* 3.14159) (defclass circle () ;;; ! implement as closure ((radius :accessor radius :initarg :radius :initform 1))) (defgeneric area (c) (:method ((c circle)) (* *pi* (radius c) (radius c)))) (defun double (f) #'(lambda (v) (* 2 (funcall f v)))) (defun absv (v) (if (< v 0) (- v) v)) (defun remainder (v d) (if (< v d) v (remainder (- v d) d))) ;;;; parameterized functions (defun line (x) #'(lambda (w b) (+ b (* w x))))