Start adding repeat form.
This commit is contained in:
parent
53c4433d2a
commit
c88a06d447
|
@ -228,11 +228,13 @@
|
||||||
(defp loop-expr group order-1 [(quiet :loop) tuple (quiet :with)
|
(defp loop-expr group order-1 [(quiet :loop) tuple (quiet :with)
|
||||||
(flat (choice :loop-body [fn-clause compound-loop]))])
|
(flat (choice :loop-body [fn-clause compound-loop]))])
|
||||||
|
|
||||||
|
(defp repeat-expr group order-1 [(quiet :repeat) (choice :word :number) block])
|
||||||
|
|
||||||
(defp collection flat choice [struct-literal dict list-literal set-literal tuple])
|
(defp collection flat choice [struct-literal dict list-literal set-literal tuple])
|
||||||
|
|
||||||
(defp simple flat choice [literal collection synthetic recur-call lambda])
|
(defp simple flat choice [literal collection synthetic recur-call lambda])
|
||||||
|
|
||||||
(defp compound flat choice [match loop-expr if-expr when-expr do-expr block])
|
(defp compound flat choice [match loop-expr if-expr when-expr do-expr block repeat-expr])
|
||||||
|
|
||||||
(defp binding-expr flat choice [fn-named let-expr ref-expr])
|
(defp binding-expr flat choice [fn-named let-expr ref-expr])
|
||||||
|
|
||||||
|
|
|
@ -674,6 +674,8 @@
|
||||||
(vswap! ctx update-ctx {name ref})
|
(vswap! ctx update-ctx {name ref})
|
||||||
ref)))
|
ref)))
|
||||||
|
|
||||||
|
(defn- interpret-repeat [ast ctx] :TODO)
|
||||||
|
|
||||||
(defn- interpret-loop [ast ctx]
|
(defn- interpret-loop [ast ctx]
|
||||||
(let [data (:data ast)
|
(let [data (:data ast)
|
||||||
tuple (interpret-ast (first data) ctx)
|
tuple (interpret-ast (first data) ctx)
|
||||||
|
@ -841,6 +843,8 @@
|
||||||
|
|
||||||
:loop-expr (interpret-loop ast ctx)
|
:loop-expr (interpret-loop ast ctx)
|
||||||
|
|
||||||
|
:repeat-expr (interpret-repeat ast ctx)
|
||||||
|
|
||||||
:block
|
:block
|
||||||
(let [exprs (:data ast)
|
(let [exprs (:data ast)
|
||||||
inner (pop exprs)
|
inner (pop exprs)
|
||||||
|
|
|
@ -30,15 +30,15 @@
|
||||||
"when" :when ;; impl, replaces cond
|
"when" :when ;; impl, replaces cond
|
||||||
|
|
||||||
;; actor model/concurrency
|
;; actor model/concurrency
|
||||||
"receive" :receive
|
;"receive" :receive
|
||||||
;;"self" :self ;; maybe not necessary?: self() is a function
|
;;"self" :self ;; maybe not necessary?: self() is a function
|
||||||
;;"send" :send ;; not necessary: send(pid, message) is a function
|
;;"send" :send ;; not necessary: send(pid, message) is a function
|
||||||
"spawn" :spawn
|
;"spawn" :spawn
|
||||||
;;"to" :to ;; not necessary if send is a function
|
;;"to" :to ;; not necessary if send is a function
|
||||||
;; type system
|
;; type system
|
||||||
;; "data" :data ;; we are going to tear out datatypes for now: see if dynamism works for us
|
;; "data" :data ;; we are going to tear out datatypes for now: see if dynamism works for us
|
||||||
;; others
|
;; others
|
||||||
;;"repeat" :repeat ;; syntax sugar over "loop": still unclear what this syntax could be
|
"repeat" :repeat ;; syntax sugar over "loop": still unclear what this syntax could be
|
||||||
"test" :test
|
"test" :test
|
||||||
;; "module" :module ;; not necessary if we don't have datatypes
|
;; "module" :module ;; not necessary if we don't have datatypes
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue
Block a user