On 9 Wrz, 15:27, Stefan Rohlfing <[email protected]> wrote:
> The indentation was correct by got messed up when I copying the code.
>
> This is how I interpret the function:
> 'expr' is only returned if (coll? expr) returns 'false', with is not
> the case with an argument such as '(+ 2 4).
> Next, this expression is destructured in the 'let' and 'prefix-
>
> >postfix called again:
>
> [ (prefix->postfix 2) (prefix->postfix 4) +]
>
> As 2 and 4 are both not a collection, their values are just returned.
> This should lead to this final result:
>
> [2 4 +]
>
> However, no vector is returned, just the initial argument to the
> function.
>
> I really want to understand what I did wrong here :-)
>
> Stefan
Hello.
You understand recursion correctly, the issue is with lisp syntax :)
Your code:
(defn prefix->postfix [expr]
(if (coll? expr)
(let [ [op arg1 arg2] expr]
[ (prefix->postfix arg1) (prefix->postfix arg2) op]))
expr)
Translated to pseudocode it does:
def f(expr):
if expr is collection:
calculate vector and ignore the result
else:
calculate nil and ignore it
return expr
It's because code should look like this:
(defn prefix->postfix [expr]
(if (coll? expr)
(let [ [op arg1 arg2] expr]
[ (prefix->postfix arg1) (prefix->postfix arg2) op])
expr))
Notice the difference with the placing of the penultimate ")" - this
difference would be easier to notice, if you indent your code
automaticaly - by emacs for example.
Becouse of that paren if in your function is version with only one
branch - this if would evaluate to nil if expr will be not colleciton.
But no matter what the expr is, after the if there is expr and (as a
last expression in the function body) it is what the function returns.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en