Hi Varun - the best advice I think I could give you is to spend a
whole bunch of time on https://clojuredocs.org and https://www.conj.io
(any others?) familiarising yourself with the core API. There is also
the official http://clojure.org/api/api but I find the example on
clojuredocs invaluable.

For me, my first few months was spent writing a whole bunch of
unidiomatic and ugly code badly replicating what was already in the
core libs. In fact, there was a bit of a bad smell of writing lots of
Clojure code as the core lib provides a _lot_ more than you might
think (I came from Java).

Also, you might want to invest in either core.typed or prismatic
schema for validating shapes of data. I think Brian Marick of Midje
fame has a similar answer but I can't recall the name.

Oh, and this community is great - keep asking questions and someone
will answer :-) - are you on slack?

On 15 April 2016 at 03:42, Varun Kamra <varun.kamr...@gmail.com> wrote:
> Oh, I didn't even know we could loop using dotimes. Thanks for the
> explanation and for the code as well.
>
>
> On Thursday, April 14, 2016 at 6:58:57 PM UTC-7, Bobby Eickhoff wrote:
>>
>> The result of the last expression evaluated is always returned.  Hence,
>> the shape of the function is what determines the points of return and the
>> returned values.  For example,  if you're entire function is defined as one
>> (if ...) statement, there are two possible points of return, each of the
>> branches.
>>
>> But I think you're probably asking if you can return early from a
>> function, like in Java or Javascript.  No, there's no return "statement" in
>> Clojure.  You just have to structure your functions a certain way.
>>
>> Here's an alternate version of your pyramid function which uses (recur
>> ...).  This is equivalent to calling pyramid recursively, but the compiler
>> is able to optimize this recursive call away.  In other words, it will never
>> overflow the stack.
>>
>> (defn pyramid [n]
>>   (when (pos? n)
>>     (dotimes [_ n]
>>       (print "* "))
>>     (println)
>>     (recur (dec n))))
>>
>>
>>
>>
>> On Thursday, April 14, 2016 at 9:23:58 PM UTC-4, Varun Kamra wrote:
>>>
>>> On Thursday, April 14, 2016 at 5:58:33 PM UTC-7, Varun Kamra wrote:
>>> > Hey guys I am new to clojure. I was just experimenting by printing a
>>> > pyramid of stars 5 rows and 5 column. Here's the code:
>>> >
>>> > (defn pyramid [j i]
>>> > (if (and (= i 0) (neg?
>>> > (println "There's your pyramid"))
>>> > (if (= j 0)
>>> > (do (println)
>>> > (pyramid (- i 1) (- i 1)))
>>> > (do (print "* ")
>>> > (pyramid (- j 1) i))))
>>> >
>>> > It's working fine till it prints the pyramid, but after printing it, it
>>> > continues printing a lot of stars and eventually fail with stack 
>>> > overflow. I
>>> > am guessing that a if I put a negative check I can prevent it but I wanted
>>> > to know if there's a way to return from the recursive call instead.
>>>
>>> I understood now, it was going in the else condition of the if so here'so
>>> the modified code
>>>
>>> (defn pyramid [j i]
>>> (if (= i 0)
>>> (println "There's your pyramid"))
>>> (if (= j 0)
>>> (do (println)
>>> (pyramid (- i 1) (- i 1))))
>>> (if (not (neg? j))
>>> (do (print "* ")
>>> (pyramid (- j 1) i))))
>>>
>>> But my question still stands if ther's a way to return from function.
>
> --
> 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.

-- 
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