gpt4 book ai didi

带有多个 if 语句的 clojure

转载 作者:行者123 更新时间:2023-12-03 15:04:27 26 4
gpt4 key购买 nike

当我调用 math() 函数到“时间”时,REPL 返回 nil。当我使用“添加”时,它工作正常......帮助!

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

最佳答案

问题是你的函数是两个子句的序列 if -形式。

  • Clojure 依次执行序列的元素,返回
    最后的结果。
  • 如果条件失败,则为两个子句 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com