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
If statement clojure如果还有别的吗?_If Statement_Clojure - Fatal编程技术网

If statement clojure如果还有别的吗?

If statement clojure如果还有别的吗?,if-statement,clojure,If Statement,Clojure,这应该是一个非常琐碎的问题。 我是Clojure的新手,写这篇文章的依据是: 然而,我不断地发现这个错误: java.lang.Exception:if的参数太多(无源文件:424) 在模板中: (if test then else?) then和else都不表示关键字,而是实际表达式。?表示else表达式是可选的 对测试条件进行求值,并根据其值对相应的分支表达式进行求值,并将其作为整个if表达式的值“返回” 例如,这将定义一个绝对值函数: (defn abs [x] (if (<

这应该是一个非常琐碎的问题。 我是Clojure的新手,写这篇文章的依据是:

然而,我不断地发现这个错误:

java.lang.Exception:if的参数太多(无源文件:424)

在模板中:

(if test then else?)
then
else
都不表示关键字,而是实际表达式。
表示
else
表达式是可选的

对测试条件进行求值,并根据其值对相应的分支表达式进行求值,并将其作为整个if表达式的值“返回”

例如,这将定义一个绝对值函数:

(defn abs [x]
  (if (< x 0)
    (- x)
    x))
(定义abs[x]
(如果(

这是编写此代码的惯用方法。我建议使用一个文本编辑器/IDE,它具有编辑Lisp源代码(括号/括号/大括号匹配)的基本支持。

删除所有冗余代码的示例的正确实现是:

(defn sumdown
  [sum x]
  (recur (+ sum x) (dec x)))
因为你的“then”和“else”子句都是相同的,而“do”是多余的(在任何情况下,各种“do”形式都有副作用)


其他条件要考虑的是:当,康德,康德和案例。

为什么你把“Do”放在里面?“尼克尼克谢谢你修理,我不知道他是不是有这个原因。1。请以正确的方式格式化您的参数。2.你的代码不起作用!你不可能是对的x@nickik:对不起,我有一段时间没写lisp了。谢谢:)@nickik
如果
并不总是需要
否则
,@QuicksilverJohny这样说是对的?表示可选参数
when
是一个方便的函数,它允许计算多个表达式,因为它被包装在显式的
do
@too中。我说你“应该”有一个else部分。如果我在Clojure中读到“如果”,我期待一个其他的。它使代码更具可读性,以便在需要时始终使用。@nickik所以它是一种风格选择?这难道不限制那些与你想法不同的人吗?就我个人而言,我喜欢这样一个事实,即语言提供了一些灵活性,而没有强加“一种真正的方式”。我在编写公开使用的库时可以理解这种方法。这就是说,我以后肯定会看看
,因为我也很难处理clojure括号中的意大利面。
(defn sumdown [sum x]
  (if (foo x)
    (recur (+ sum x) (dec x))
    (recur (+ sum x) (dec x))))
(defn sumdown
  [sum x]
  (recur (+ sum x) (dec x)))