当我调用 math() 函数到“时间”时,REPL 返回 nil。当我使用“添加”时,它工作正常......帮助!
(defn math [opr x y ]
(if(= opr "times")
(* x y)
)
(if(= opr "add")
(+ x y)
)
)
(math "times" 8 8)
最佳答案
问题是你的函数是两个子句的序列 if
-形式。
最后的结果。
if
-form 返回 nil
. 最快的修复是,as WeGi suggested , 嵌套
if
s:(defn math [opr x y]
(if (= opr "times")
(* x y)
(if (= opr "add")
(+ x y))))
但是,还有更好的方法:
(defn math [opr x y]
(case opr
"add" (+ x y)
"times" (* x y)))
...而且,将 C/Java 习惯用法抛在脑后,...
(defn math [opr x y]
((case opr
"add" +
"times" *)
x y))
... 或者 ...
(defn math [opr x y]
(({"add" +, "times" *} opr) x y))
关于带有多个 if 语句的 clojure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681374/