clojure with multiple if statements

clojure

Solution

The problem is that your function is a sequence of two-clause `if`-forms.

- Clojure performs the elements of the sequence in turn, returning the result of the last.

- If the condition fails, a two-clause `if`-form returns `nil`.

The quickest repair is, as WeGi suggested, to nest the `if`s:

(defn math [opr x y]
  (if (= opr "times")
    (* x y)
    (if (= opr "add")
      (+ x y))))

However, there are better ways:

(defn math [opr x y]
  (case opr
    "add" (+ x y)
    "times" (* x y)))

... and, leaving C / Java idioms behind, ...

(defn math [opr x y]
  ((case opr
     "add" +
     "times" *)
   x y))

... or ...

(defn math [opr x y]
  (({"add" +, "times" *} opr) x y))

Problem

when I call the math() function, to "times", the REPL returns nil. when I use "add", it works fine... help! ``` (defn math [opr x y ] (if(= opr "times") (* x y) ) (if(= opr "add") (+ x y) ) ) (math "times" 8 8) ```

Original source

Related problems