~subsetpark/ec

ref: 5f2065e7cc6bb4fd362d3861bfd2a5cdc32f128f ec/src/operations.janet -rw-r--r-- 862 bytes
5f2065e7 — Zach Smith Add if 9 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(import /src/calc)

(defmacro defop
  [name arity out-arity f &opt doc]
  ~(def ,name (:new calc/Operation
                    :arity ,arity
                    :out-arity ,out-arity
                    :type ,(keyword name)
                    :fun-ref ,f
                    :doc ,doc)))

(defmacro defcmp
  [name arity out-arity cmp]
  ~(defop ,name ,arity ,out-arity
     (fn [x y] (if (,cmp x y) 1 0))
     (string/format
       `x y -- p
       Comparison predicate.
       Push 1 if x %s y;
              else 0.
       ` ,(string cmp))))

(defop add 2 1 +)
(defop sub 2 1 -)
(defop div 2 1 /)
(defop mul 2 1 *)
(defop cmp 2 1 cmp
  `x y -- p
  Push -1 if x < y;
        0 if x = y;
        1 if x > y.
  `)
(defop pow 2 1 math/pow)
(defop sqrt 1 1 math/sqrt)

(defcmp lt 2 1 <)
(defcmp gt 2 1 >)
(defcmp lte 2 1 <=)
(defcmp gte 2 1 >=)
(defcmp eq 2 1 =)