40 lines
734 B
Common Lisp
40 lines
734 B
Common Lisp
;;;; 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))))
|