2018-09-23 10:34:38 +03:00
|
|
|
(load "Macros.carp")
|
|
|
|
|
2018-01-29 09:14:41 +03:00
|
|
|
;; The 'copy' and 'str' interfaces are defined internally:
|
|
|
|
;;(definterface copy (λ [&a] a))
|
|
|
|
;;(definterface str (λ [a] String))
|
|
|
|
|
2017-11-21 18:56:39 +03:00
|
|
|
(definterface = (λ [a a] Bool))
|
2017-11-24 19:17:49 +03:00
|
|
|
(definterface /= (λ [a a] Bool))
|
|
|
|
|
2017-12-04 09:21:35 +03:00
|
|
|
(definterface add-ref (λ [&a &a] a))
|
2017-12-13 13:10:42 +03:00
|
|
|
(definterface sub-ref (λ [&a &a] a))
|
|
|
|
(definterface mul-ref (λ [&a &a] a))
|
|
|
|
(definterface div-ref (λ [&a &a] a))
|
2017-12-04 09:21:35 +03:00
|
|
|
|
2017-12-13 13:10:42 +03:00
|
|
|
(definterface + (λ [a a] a))
|
|
|
|
(definterface - (λ [a a] a))
|
|
|
|
(definterface * (λ [a a] a))
|
|
|
|
(definterface / (λ [a a] a))
|
2017-12-28 19:46:47 +03:00
|
|
|
(definterface mod (λ [a a] a))
|
2017-11-27 23:55:52 +03:00
|
|
|
|
2017-12-14 00:29:43 +03:00
|
|
|
(definterface < (λ [a a] Bool))
|
|
|
|
(definterface > (λ [a a] Bool))
|
2017-12-10 21:45:59 +03:00
|
|
|
|
2018-01-29 09:14:41 +03:00
|
|
|
(definterface inc (λ [a] a))
|
|
|
|
(definterface dec (λ [a] a))
|
|
|
|
|
2019-03-26 20:08:17 +03:00
|
|
|
(definterface to-int (λ [a] Int))
|
|
|
|
(definterface from-int (λ [Int] a))
|
|
|
|
|
2018-01-29 09:14:41 +03:00
|
|
|
(definterface format (λ [&String a] String))
|
|
|
|
(definterface from-string (λ [&String] a))
|
|
|
|
|
|
|
|
(definterface zero (λ [] a))
|
2017-12-28 20:02:50 +03:00
|
|
|
(definterface random (Fn [] a))
|
|
|
|
(definterface random-between (Fn [a a] a))
|
|
|
|
|
2017-12-15 00:48:19 +03:00
|
|
|
(definterface pi a)
|
2017-12-13 01:13:05 +03:00
|
|
|
|
2018-05-07 22:57:15 +03:00
|
|
|
(definterface neg (λ [a] a))
|
|
|
|
|
2018-01-29 09:14:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
;; The following functions make use of the interfaces
|
2017-12-15 12:37:16 +03:00
|
|
|
|
|
|
|
(defn <= [a b]
|
|
|
|
(or (< a b)
|
|
|
|
(= a b)))
|
|
|
|
|
|
|
|
(defn >= [a b]
|
|
|
|
(or (> a b)
|
|
|
|
(= a b)))
|
2018-01-15 18:27:05 +03:00
|
|
|
|
|
|
|
(defn cmp [a b]
|
|
|
|
(if (= a b)
|
|
|
|
0
|
|
|
|
(if (< a b) -1 1)))
|
2018-01-29 09:14:41 +03:00
|
|
|
|
|
|
|
(defn max [a b]
|
|
|
|
(if (> a b) a b))
|
|
|
|
|
|
|
|
(defn min [a b]
|
|
|
|
(if (< a b) a b))
|
2018-03-22 15:25:30 +03:00
|
|
|
|
2018-04-21 16:45:05 +03:00
|
|
|
(defn zero? [x]
|
|
|
|
(= (zero) x))
|
|
|
|
|
2018-04-20 14:18:58 +03:00
|
|
|
(defn pos? [x]
|
2018-04-21 16:45:05 +03:00
|
|
|
(< (zero) x))
|
2018-04-20 14:18:58 +03:00
|
|
|
|
|
|
|
(defn neg? [x]
|
|
|
|
(< x (zero)))
|
|
|
|
|
2018-03-22 15:25:30 +03:00
|
|
|
(defn id [x] x)
|
2018-03-23 17:13:17 +03:00
|
|
|
|
|
|
|
(defn null? [p]
|
|
|
|
(Pointer.eq NULL (the (Ptr t) p)))
|
|
|
|
|
|
|
|
(defn not-null? [p]
|
|
|
|
(not (null? p)))
|