decons/decons.lisp
2025-05-22 09:11:54 +02:00

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))))