Browse Source

Switch from equalp to equal, add some implementations of copy-expression

Samuel W. Flint 4 years ago
parent
commit
a69141fccf
1 changed files with 21 additions and 9 deletions
  1. 21 9
      larcs.org

+ 21 - 9
larcs.org

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