Browse Source

Finish Trig types

Samuel W. Flint 5 years ago
parent
commit
fbc0ac3aca
1 changed files with 101 additions and 3 deletions
  1. 101 3
      larcs.org

+ 101 - 3
larcs.org

@@ -67,7 +67,7 @@ While the [[id:f3e3cdb9-a661-4598-8be1-e15f587f35bb][Introduction]] describes th
 #+TOC: headlines 3
 #+TOC: listings
 
-* WORKING Expression Types [2/4]
+* WORKING Expression Types [3/4]
 :PROPERTIES:
 :ID:       fe611e8f-db42-4fe0-8e77-9cfb55d2227c
 :END:
@@ -273,7 +273,7 @@ Equality of constants is a bit different, and is checked as follows:
        (slot-value expression-b 'value)))
 #+END_SRC
 
-** WORKING Compound Types [6/7]
+** DONE Compound Types [7/7]
 :PROPERTIES:
 :ID:       a0d2eb19-8a1e-4dee-9b41-c454a49cacc4
 :END:
@@ -472,7 +472,104 @@ CLOSED: [2019-01-05 Sat 15:47]
              (log-of expression-b))))
 #+END_SRC
 
-*** TODO Trigonometric
+*** DONE Trigonometric
+CLOSED: [2019-01-16 Wed 15:41]
+
+Trigonemtric functions are also a bit weird -- as given a "normal" trig function, /e.g.,/ $\sin{\theta}$, there's the normal, the inverse, the hyperbolic, and the hyperbolic inverse.  As such, we have a superclass for each, and then equality, which checks type and ~eqal~-ness of the inner expression.
+
+#+Caption: Trig Bases
+#+Name: type-trigs
+#+BEGIN_SRC lisp 
+  @export
+  (defclass <trig> (<expression>)
+    ((expression :reader expression
+                 :initarg :expression
+                 :type <expression>)))
+
+  @export
+  (defclass <inverse-trig> (<trig>) ())
+
+  @export
+  (defclass <hyperbolic-trig> (<trig>) ())
+
+  (defmethod eqal ((expression-a <trig>) (expression-b <trig>))
+    (and (equalp (type-of expression-a)
+               (type-of expression-b))
+       (eqal (expression expression-a)
+             (expression expression-b))))
+
+  @export
+  (defclass <sin> (<trig>) ())
+
+  @export
+  (defclass <cos> (<trig>) ())
+
+  @export
+  (defclass <tan> (<trig>) ())
+
+  @export
+  (defclass <csc> (<trig>) ())
+
+  @export
+  (defclass <sec> (<trig>) ())
+
+  @export
+  (defclass <cot> (<trig>) ())
+
+  @export
+  (defclass <asin> (<inverse-trig>) ())
+
+  @export
+  (defclass <acos> (<inverse-trig>) ())
+
+  @export
+  (defclass <atan> (<inverse-trig>) ())
+
+  @export
+  (defclass <acsc> (<inverse-trig>) ())
+
+  @export
+  (defclass <asec> (<inverse-trig>) ())
+
+  @export
+  (defclass <acot> (<inverse-trig>) ())
+
+  @export
+  (defclass <sinh> (<hyperbolic-trig>) ())
+
+  @export
+  (defclass <cosh> (<hyperbolic-trig>) ())
+
+  @export
+  (defclass <tanh> (<hyperbolic-trig>) ())
+
+  @export
+  (defclass <csch> (<hyperbolic-trig>) ())
+
+  @export
+  (defclass <sech> (<hyperbolic-trig>) ())
+
+  @export
+  (defclass <coth> (<hyperbolic-trig>) ())
+
+  @export
+  (defclass <asinh> (<hyperbolic-trig> <inverse-trig>) ())
+
+  @export
+  (defclass <acosh> (<hyperbolic-trig> <inverse-trig>) ())
+
+  @export
+  (defclass <atanh> (<hyperbolic-trig> <inverse-trig>) ())
+
+  @export
+  (defclass <acsch> (<hyperbolic-trig> <inverse-trig>) ())
+
+  @export
+  (defclass <asech> (<hyperbolic-trig> <inverse-trig>) ())
+
+  @export
+  (defclass <acoth> (<hyperbolic-trig> <inverse-trig>) ())
+#+END_SRC
 
 ** DONE Blended Types -- Polynomial Terms
 CLOSED: [2019-01-05 Sat 09:46]
@@ -1382,6 +1479,7 @@ As all of the packages are defined centrally, this makes resolving inter-package
   <<type-division>>
   <<type-exponentials>>
   <<type-logarithmics>>
+  <<type-trigs>>
 
   <<type-poly-term>>
 #+END_SRC