|
@@ -214,6 +214,9 @@ As an ~<atomic>~, ~<number>~ is rather simple, having only one slot, ~value~, re
|
|
|
(defmethod to-sexp ((expression <number>) &optional resolve-constants-p)
|
|
|
(declare (ignorable resolve-constants-p))
|
|
|
(slot-value expression 'value))
|
|
|
+
|
|
|
+ (defmethod copy-expression ((expression <number>))
|
|
|
+ (make-instance '<number> :value (slot-value expression 'value)))
|
|
|
#+END_SRC
|
|
|
|
|
|
*** DONE Variables
|
|
@@ -222,7 +225,7 @@ CLOSED: [2019-01-16 Wed 16:13]
|
|
|
:ID: f5f656d0-6253-4c4c-8c50-6622d685eaa1
|
|
|
:END:
|
|
|
|
|
|
-~<variable>~ is similar to ~<number>~, with the only difference being ~name~ must be a ~symbol~ or ~keyword~. Two ~<variable>~ objects are ~eqal~ if the ~name~ of each is ~equalp~.
|
|
|
+~<variable>~ is similar to ~<number>~, with the only difference being ~name~ must be a ~symbol~ or ~keyword~. Two ~<variable>~ objects are ~eqal~ if the ~name~ of each is ~equal~.
|
|
|
|
|
|
#+Caption: Variables
|
|
|
#+Name: type-variables
|
|
@@ -237,12 +240,16 @@ CLOSED: [2019-01-16 Wed 16:13]
|
|
|
(slot-value expression 'name))
|
|
|
|
|
|
(defmethod eqal ((expression-a <variable>) (expression-b <variable>))
|
|
|
- (equalp (value expression-a)
|
|
|
+ (equal (value expression-a)
|
|
|
(value expression-b)))
|
|
|
|
|
|
(defmethod to-sexp ((expression <variable>) &optional resolve-constants-p)
|
|
|
(declare (ignore resolve-constants-p))
|
|
|
(slot-value expression 'name))
|
|
|
+
|
|
|
+ (defmethod copy-expression ((expression <variable>))
|
|
|
+ (make-instance '<variable>
|
|
|
+ :name (slot-value expression 'name)))
|
|
|
#+END_SRC
|
|
|
|
|
|
*** DONE Constants
|
|
@@ -255,8 +262,8 @@ CLOSED: [2019-01-16 Wed 16:23]
|
|
|
|
|
|
Equality of constants is a bit different, and is checked as follows:
|
|
|
|
|
|
- - ~<constant>~, ~<constant>~ :: Check if ~name~ is ~equalp~.
|
|
|
- - ~<constant>~, ~<variable>~ :: Check if ~name~ is ~equalp~.
|
|
|
+ - ~<constant>~, ~<constant>~ :: Check if ~name~ is ~equal~.
|
|
|
+ - ~<constant>~, ~<variable>~ :: Check if ~name~ is ~equal~.
|
|
|
- ~<constant>~, ~<number>~ :: Check if ~value~ is ~=~.
|
|
|
|
|
|
#+Caption: Constants
|
|
@@ -275,12 +282,12 @@ Equality of constants is a bit different, and is checked as follows:
|
|
|
(slot-value expression 'name)))
|
|
|
|
|
|
(defmethod eqal ((expression-a <constant>) (expression-b <constant>))
|
|
|
- (equalp (slot-value expression-a 'name)
|
|
|
- (slot-value expression-b 'name)))
|
|
|
+ (equal (slot-value expression-a 'name)
|
|
|
+ (slot-value expression-b 'name)))
|
|
|
|
|
|
(defmethod eqal ((expression-a <constant>) (expression-b <variable>))
|
|
|
- (equalp (slot-value expression-a 'name)
|
|
|
- (slot-value expression-b 'name)))
|
|
|
+ (equal (slot-value expression-a 'name)
|
|
|
+ (slot-value expression-b 'name)))
|
|
|
|
|
|
(defmethod eqal ((expression-a <constant>) (expression-b <number>))
|
|
|
(= (slot-value expression-a 'value)
|
|
@@ -290,6 +297,11 @@ Equality of constants is a bit different, and is checked as follows:
|
|
|
(if resolve-constants-p
|
|
|
(slot-value expression 'value)
|
|
|
(slot-value expression 'name)))
|
|
|
+
|
|
|
+ (defmethod copy-expression ((expression <constant>))
|
|
|
+ (make-instance '<constant>
|
|
|
+ :name (slot-value expression 'name)
|
|
|
+ :value (slot-value expression 'value)))
|
|
|
#+END_SRC
|
|
|
|
|
|
** WORKING Compound Types [5/7]
|
|
@@ -536,7 +548,7 @@ Trigonemtric functions are also a bit weird -- as given a "normal" trig function
|
|
|
(defclass <hyperbolic-trig> (<trig>) ())
|
|
|
|
|
|
(defmethod eqal ((expression-a <trig>) (expression-b <trig>))
|
|
|
- (and (equalp (type-of expression-a)
|
|
|
+ (and (equal (type-of expression-a)
|
|
|
(type-of expression-b))
|
|
|
(eqal (expression expression-a)
|
|
|
(expression expression-b))))
|