【问题标题】:Use 'def' define a function in clojure使用'def'在clojure中定义一个函数
【发布时间】:2013-03-29 12:24:23
【问题描述】:

这是两个请求相同参数并返回相同布尔类型值的函数。 如:

 (defn Foo1 [x] (< x 3))
 (defn Foo2 [x] (> x -10))

但是当我定义下面的函数时我很困惑:

 (def Foo3 (or Foo1 Foo2))

你们能告诉我它是如何工作的吗?非常感谢!

【问题讨论】:

  • (def Foo3 (some-fn Foo1 Foo2)) 也会为您提供所需的内容。

标签: clojure


【解决方案1】:

(defn f [a] a) 只是(def f (fn [a] a)) 的快捷方式

如果def 绑定的第二个参数是函数,那么第一个参数也是函数。

【讨论】:

  • 在我的例子中。当我用一个 agrument 调用 Foo3 时,我想分别从 Foo1 和 Foo2 获得两个返回值。但实际上,Foo3 只是跳过 Foo2 并返回来自 Foo1 的值跨度>
  • 只是因为or 将第一个参数评估为真,然后不需要计算下一个,因为整个结果为真。
  • 看来不是这样。我什至尝试过 Foo1 返回 false,第二个函数 Foo2 没有被调用。而 Foo3 将返回 Foo1 返回的任何内容。
  • 我明白了,您错过了辅助函数的参数。 (or Foo1 Foo2) 根本不调用函数的问题。函数本身的计算结果为 true,因此您的结果始终为 true。工作示例:(def Foo3 #(or (Foo1 %) (Foo2 %)))
【解决方案2】:

假设您正在尝试组合条件,您可能想要:

(defn foo3 [x] (or (foo1 x) (foo2 x)))

也就是说,您正在定义一个新函数foo3,其结果是使用相同参数x 调用foo1foo2 的结果。

P.S.在 Clojure 中以小写字母命名函数是惯例。

【讨论】:

  • 谢谢。这正是我想要的,但我想知道我的问题是怎么来的。
猜你喜欢
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2023-03-20
  • 2014-12-14
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多