Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:函数将不会正确返回_Clojure - Fatal编程技术网

Clojure:函数将不会正确返回

Clojure:函数将不会正确返回,clojure,Clojure,这总是返回false,我假设在clojure中,它只返回我在函数中编写的最后一个内容。当满足if条件时,如何中断循环并返回内容?if宏的格式如下: (defn foo [n] (if (== 1 n) true ) false ) (if (true? (foo 1)) (println "true") ) (if (false? (foo 1)) (pr

这总是返回false,我假设在clojure中,它只返回我在函数中编写的最后一个内容。当满足if条件时,如何中断循环并返回内容?

if宏的格式如下:

    (defn foo [n]
      (if (== 1 n)
        true
        )
      false
      )

    (if (true? (foo 1))
         (println "true")
         )
    (if (false? (foo 1))
      (println "false")
      )
您的代码是这样编写的:

(if conditional-expression return-for-true return-for-false)
注意放错地方的帕伦。还要注意,除非条件表达式是函数调用,否则不需要参数

正如编写的那样,foo函数计算两个表达式
(if…
false
,并可预测地返回最后一个计算的表达式,它只是文本
false
。对于一个较短和更容易理解的例子,考虑一下:
(if conditional-expression return-for-true) return-for-false

调用此函数将始终返回4:加法表达式要么经过计算,不被编译器使用,要么被编译器优化掉。

将true后的paren移到false后:
(如果(=1 n)true-false)
。还建议使用支持格式化的编辑器,这很难阅读(这可能是你自己没有注意到问题的原因)。如上所述,这是一个令人振奋的问题,任何代码格式都会使这一点变得显而易见。另外,这里没有循环。还要注意,foo相当于
(partial=1)
。在Clojure中,您不会中断循环;您可以使用再次打断它。在
(条件表达式)
周围有多余的括号。正如
then
else
分支一样,这种情况没有装饰性的装饰性装饰。@amalloy做了一个澄清的编辑。这样写是因为在原来的问题中,条件表达式是一个函数调用。编辑为引用
if
运算符,该运算符不是函数。@缩略图有什么区别?我的印象是,作为LISP方言,if是一个函数,在列表中占据“函数位置”。@JaredSmith我遵循页面的术语:非空列表被视为对特殊窗体、宏或函数的调用。调用的形式为(运算符操作数*)。碰巧,
if
是一种特殊形式。它当然不是一个函数,因为它的操作数可能不会全部被计算。我相信其他Lisp也使用类似的术语。
(defn foo [n] (+ 3 n) 4)