Thank you, that's very helpful.

I'm wondering if you know of a ClojureScript debugging library (something 
on the level of xlib for php) that I can use to watch the evaluation of 
forms programmatically with breakpoints. 

I'm trying to develop a tool that runs a Clojure program by stepping 
through evaluation for each form.

On Thursday, July 20, 2017 at 5:38:47 PM UTC-6, tbc++ wrote:
>
> The answer lies in the term "REPL". You start by reading the string, you 
> can use `clojure.core/read-string` for this case. This will convert your 
> string into Clojure data:
>
> "(+ 1 (* 2 2))" => (+ 1 (* 2 2))
>
> That's the "R" part of "REPL", read. 
>
> Next step is "E" for "eval". We need to evaluate the structure. In a very 
> simple sort of way you can write eval thusly:
>
> (defn simple-eval [form]
>   (cond
>     (integer? form) form
>     
>     (symbol? form)  (condp = form
>                                  '+ +
>                                  '* *)
>                                  
>     (seq? form) (let [[f & args] (map simple-eval form)
>                          (apply f args))))
>
> As you see this algorithm is recursive. And it's also a (very) simple lisp 
> interpreter. If we get an integer we return it. If we get a symbol we 
> return the matching function. If we get a seq, we recursively eval all the 
> contents of the seq then call the first resolved item passing it the args. 
> You could easily insert println expressions in the above code to see how it 
> step-by-step evals the code from left-to-right and from 
> deepest-to-shallowest expression. 
>
> This is known as an interpreter as it interprets the code more or less at 
> runtime. Now this sort of interpreter isn't exactly fast (although it's 
> very simple and easy to understand). So often language designers will 
> compile languages by preprocessing and transforming the input code into a 
> different language. C compiles to assembly. ClojureScript compiles to 
> JavaScript. And Clojure compiles to JVM byte code. The point of these 
> compilation steps is to remove the overhead of this interpreter. 
>
> The P in REPL stands for "Print". After we eval a form we print the result.
>
> And then we "L"oop back to the start. 
>
> Hopefully this helps a bit. 
>
> Timothy
>
>
> On Thu, Jul 20, 2017 at 4:39 PM, Lincoln Bergeson <lincoln...@gmail.com 
> <javascript:>> wrote:
>
>> Here's my how-to question for someone with in-depth knowledge of the 
>> clojure/clojurescript compiler:
>>
>> If I have a string representing a valid Clojure form, say for example, 
>> "(+ 1 (* 2 (/ 6 3)))", how would I "reduce" this form to the form with one 
>> s-expr evaluated? That is, how would I obtain "(+ 1 (* 2 2))"? And then 
>> from there, how would I obtain "(+ 1 4)", and then "5"?
>>
>> I read through David Nolen's brief intro to the cljs compiler: 
>> https://github.com/swannodette/hello-cljsc  and suspect the answer lies 
>> in ASTs. I'm just not sure where to start.
>>
>> Forgive me if I should be posting this somewhere else, just not sure 
>> where else I can find an answer.
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> “One of the main causes of the fall of the Roman Empire was that–lacking 
> zero–they had no way to indicate successful termination of their C 
> programs.”
> (Robert Firth) 
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to