Hi!
Here's another way you could do it:
(defn say-hello
([names] (say-hello names #{}))
([names saluted]
(reduce (fn [saluted name]
(if (saluted name)
(do (println "Hello" name "!")
(conj saluted name))
(do (println "Welcome Back" name "!")
saluted)))
saluted names)
(println "Goodbye!")))
https://gist.github.com/johnwalker/750ad582d50dd3f2e09e
A few things to think about are the loop and recur macro. loop is a macro
that Clojure uses since there is no support for tail recursion on the jvm.
Since we're just iterating over the seq though, we can just use reduce. A
minor stylistic detail is that hyphens are generally preferred over
underscores. The unary function providing a default value for the second
argument and calling the binary function is idiomatic. Of course, there are
many ways to do this. Good luck!
On Wednesday, October 1, 2014 4:06:00 PM UTC-7, Nicolás F. wrote:
>
> I'm a clojure noob and im playing around with the language; made this fn
> to have a taste of a couple of features. I think it's pretty concise but
> i'm probably doing something "not the clojure way", So if you can teach me
> a couple of things please go ahead ;D
>
> (defn say_hello
> ([names] (say_hello names []))
> ([names saluted]
> (if (some #{(first names)} saluted)
> (println "Welcome Back" (first names) "!")
> (println "Hello" (first names) "!"))
> (if (empty? (rest names))
> (println "Goodbye")
> (say_hello (rest names) (cons (first names) saluted)))))
>
> (say_hello ["Peter" "Pablo" "John" "Peter"])
>
> ; Hello Peter !
> ; Hello Pablo !
> ; Hello John !
> ; Welcome Back Peter !
> ; Goodbye
> ; nil
>
>
--
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
---
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 [email protected].
For more options, visit https://groups.google.com/d/optout.