New changes
This commit is contained in:
@@ -2,28 +2,47 @@
|
||||
"Airthmetic operators."
|
||||
(:require [emptyhead.thought.define :as def]
|
||||
[emptyhead.thought.crud :as thought]
|
||||
[emptyhead.newlib.message :as msg]))
|
||||
[emptyhead.newlib.message :as msg]
|
||||
[emptyhead.newlib.delegate :as del]
|
||||
[emptyhead.thought.extend :as extend]
|
||||
[emptyhead.thought.eval :as eval]
|
||||
[emptyhead.newlib.util :as util]))
|
||||
;; TODO values are now consumed when used instantly, this will give issues once we have variables
|
||||
|
||||
;; Initial addition, e.g. =5 +=. Returns partially applied pointer.
|
||||
(def/define! [:EH :PRIM [:EH :PRIM :NUM] :+]
|
||||
(fn [thought parent]
|
||||
(let [to (:to (thought/data parent))
|
||||
pointer (-> (str "PART<" to "+_>.") gensym keyword)
|
||||
th (thought/register-thought! [:EH :PRIM :PARTIAL :+] :transient false :data to)]
|
||||
(msg/register-impl pointer [:EH :PRIM :NUM] th)
|
||||
[parent pointer])))
|
||||
th (thought/register-thought! [:EH :IO :RETURN]
|
||||
:data to
|
||||
:reference (str "<" to "+_>"))]
|
||||
(del/add-delegate th [[:EH :PRIM :PARTIAL :+]])
|
||||
(extend/register-extension! th [th])
|
||||
[parent th])))
|
||||
|
||||
;; Final addition, e.g. =(5 +) 5=. Returns a thunk.
|
||||
(def/define! [:EH :PRIM :PARTIAL :+]
|
||||
;; Final addition, e.g. =(5 +) 5=.
|
||||
(def/define! [:EH :PRIM :PARTIAL :+ [:EH :PRIM :NUM]]
|
||||
(fn [thought parent]
|
||||
(let [from (:from (thought/data parent))
|
||||
to (thought/data thought)
|
||||
pointer (-> (str "LAZY<" from "+" to">.") gensym keyword)
|
||||
lazy (thought/register-thought! [:EH :PRIM :LAZY :+] :transient true :data [from to])]
|
||||
(msg/register-impl pointer [:EH :PRIM :REIFY] lazy)
|
||||
[parent pointer])))
|
||||
[_ to] (thought/pop-stack (eval/execute! (:to (thought/data parent)) parent))
|
||||
th (thought/register-thought! [:EH :IO :RETURN]
|
||||
:data [to from]
|
||||
:reference (str "<" to "+" from ">"))]
|
||||
(del/add-delegate th [[:EH :LAZY [:EH :PRIM :NUM]]])
|
||||
(extend/register-extension! th [th])
|
||||
[parent th])))
|
||||
|
||||
(def/define! [:EH :PRIM :LAZY :+]
|
||||
(def/define! [:EH :LAZY [:EH :PRIM :NUM] :REIFY]
|
||||
(fn [thought parent]
|
||||
(let [[from to] (thought/data thought)]
|
||||
[parent (+ from to)])))
|
||||
(let [[_ [to from]] (thought/pop-stack (eval/execute! (:to (thought/data parent)) parent))
|
||||
to (if (symbol? to) (msg/apply-msg to [:EH :REIFY]) to)
|
||||
from (if (symbol? from) (msg/apply-msg to [:EH :REIFY]) from)]
|
||||
[parent (+ to from)])))
|
||||
|
||||
(del/add-delegate [:EH :LAZY [:EH :PRIM :NUM]] [[:EH :PRIM :NUM]])
|
||||
|
||||
(thought/register-singleton! [:EH :PRIM :PARTIAL :+ [:EH :PRIM :NUM]])
|
||||
(msg/register-single-impl [:EH :PRIM :PARTIAL :+] [:EH :PRIM :NUM] [:EH :PRIM :PARTIAL :+ [:EH :PRIM :NUM]])
|
||||
|
||||
(thought/register-singleton! [:EH :LAZY [:EH :PRIM :NUM] :REIFY])
|
||||
(msg/register-single-impl [:EH :LAZY [:EH :PRIM :NUM]] [:EH :REIFY] [:EH :LAZY [:EH :PRIM :NUM] :REIFY])
|
||||
|
||||
Reference in New Issue
Block a user