Hello I am just a beginner Clojure programmer and I am unhappy with the way recur behaves in Clojure
I have implemented kata from here https://github.com/alvarogarcia7/kata-formulation-find-comments/pull/3 What it does: it outputs 'comments' (sequences starting with "#" or "//") and ignores 'comments' in quotes Here is the code: (def comment-s '("#" "//")) (def quote-s '("'" "\"")) (defn comment-s? [s] (filter #(.startsWith s %) comment-s)) (defn quote-s? [s] (filter #(.startsWith s %) quote-s)) (defn find-comment-in-line "We implement a FSM via an overloaded function -- when inside a quote, pass two arguments, including opening quote symb, otherwise just one (string itself). Don't know yet hot to recur in an ([s] (when (pos? (count s)) (if-let [cs (seq (comment-s? s))] (subs s (count (first cs))) ; yes, a comment symbol found, just return the remainder of a string (if-let [qs (seq (quote-s? s))] ; no, lets check for an opening quote (find-comment-in-line (subs s 1) qs) ; yes, an opening quote found, now go look for an end quote (find-comment-in-line (subs s 1)))))) ; no, just some other symbol found, check for the rest ([s q] (when (pos? (count s)) (if-let [qs (seq (quote-s? s))] ; lets check if it is a quote (if (= qs q) ; is it a closing quote? (find-comment-in-line (subs s 1)) ; yes, lets check for the rest (find-comment-in-line (subs s 1) q)))))) ; no, just ignore the symbol, continue looking for a closing quote My idea was to make it via recur: it does not work however because recur apparently binds to an implementation with particular number of arguments, not to a function call, and I can not see any reason why it would not. With recur I was getting Caused by: java.lang.IllegalArgumentException: Mismatched argument count to recur, expected: 1 args, got: 2 I guess the code is a bit "imperative" and imperative programmer I am. Also, I can make recur work with a nullable argument and a helper function, still... is there any reason Clojure can not bind recur to a function call in accordance with the number of arguments passed? -- 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.