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中的运算符 什么是把C++代码翻译成Culjule/< P>最正确的方法?_Clojure - Fatal编程技术网

什么是+;=clojure中的运算符 什么是把C++代码翻译成Culjule/< P>最正确的方法?

什么是+;=clojure中的运算符 什么是把C++代码翻译成Culjule/< P>最正确的方法?,clojure,Clojure,代码示例:if((J%2)==0){det+=src[0][J]*calcDet(min,ord-1)};} < P>用C++代码更改代码> DET的值。此处将返回det的新值: (fn [calcDet src ord min det J] (if (zero? (mod J 2)) (+ det (* (nth (nth src 0) J) (calcDet min (dec ord)))) det)) 从代码中删除可变性是最正确的做法 J和

代码示例:if((J%2)==0){det+=src[0][J]*calcDet(min,ord-1)};}

< P>用C++代码更改代码> DET</代码>的值。此处将返回
det
的新值:

(fn [calcDet src ord min det J]
  (if (zero? (mod J 2))
    (+ det (* (nth (nth src 0) J)
              (calcDet min (dec ord))))
    det))
从代码中删除可变性是最正确的做法

J
det
似乎是唯一变化的变量,所以我把它们放在一起作为最后两个参数。您可能希望
减少
超过
J
的值,其中
det
是累加器,在这种情况下,使用
partial
获得一个函数,该函数将保留最后两个参数

或者,您可以对类似的函数进行
迭代
,生成新状态的惰性列表,其中每个状态都是
[jdet]


Clojure中没有与
+=
等效的代码

< P > C++代码的值>代码> DET正在改变。此处将返回
det
的新值:

(fn [calcDet src ord min det J]
  (if (zero? (mod J 2))
    (+ det (* (nth (nth src 0) J)
              (calcDet min (dec ord))))
    det))
从代码中删除可变性是最正确的做法

J
det
似乎是唯一变化的变量,所以我把它们放在一起作为最后两个参数。您可能希望
减少
超过
J
的值,其中
det
是累加器,在这种情况下,使用
partial
获得一个函数,该函数将保留最后两个参数

或者,您可以对类似的函数进行
迭代
,生成新状态的惰性列表,其中每个状态都是
[jdet]


Clojure中没有与
+=
等效的代码

嗯,要添加到
det
的正在计算的表达式如下所示:

(* (get-in src [0 J]) (calcDet min (dec ord)))
(when (even? J)
   ... do something)
您的
if
(假设没有其他项)如下所示:

(* (get-in src [0 J]) (calcDet min (dec ord)))
(when (even? J)
   ... do something)
带有
else
分支的
if
看起来像:

(if (even? J)
  ... do something
  ... otherwise, do something else)
要添加数字,请执行以下操作:

(+ 1 2 3)
但是,当涉及到
+=

封闭式思考意味着思考表达式的求值问题。值是不可更改的。你真正想做的不是改变数据,而是做什么?那么,您需要计算一些值,以添加到当前绑定到名称
det
的任何值中。然后,您可以将该结果绑定到一个名称,或者将其馈送到另一个表达式中。没有状态,只是计算表达式

也就是说,如果没有更大的背景,考虑一个“等价物”是毫无意义的,因为解决问题的整个方法是不同的

循环、索引数组和就地变异都是代码片段的特性。虽然这些与现代硬件架构(又名“计算机语言”)是一致的,但它们有时与我们人类大脑自然处理问题的方式并不一致。因此,在此基础上的抽象级别通常允许我们“缩小”并将问题作为一个整体来看待,如果有工具可以这样做,我们通常会找到一个更整洁的解决方案


因此,如果不知道这段代码的上下文,就不存在“等价物”,至少不是惯用的。我特别没有提到原子,原子是clojure保持和变异状态的机制之一,因为它们肯定不适用于这段代码。

好吧,要添加到
det
的计算表达式如下所示:

(* (get-in src [0 J]) (calcDet min (dec ord)))
(when (even? J)
   ... do something)
您的
if
(假设没有其他项)如下所示:

(* (get-in src [0 J]) (calcDet min (dec ord)))
(when (even? J)
   ... do something)
带有
else
分支的
if
看起来像:

(if (even? J)
  ... do something
  ... otherwise, do something else)
要添加数字,请执行以下操作:

(+ 1 2 3)
但是,当涉及到
+=

封闭式思考意味着思考表达式的求值问题。值是不可更改的。你真正想做的不是改变数据,而是做什么?那么,您需要计算一些值,以添加到当前绑定到名称
det
的任何值中。然后,您可以将该结果绑定到一个名称,或者将其馈送到另一个表达式中。没有状态,只是计算表达式

也就是说,如果没有更大的背景,考虑一个“等价物”是毫无意义的,因为解决问题的整个方法是不同的

循环、索引数组和就地变异都是代码片段的特性。虽然这些与现代硬件架构(又名“计算机语言”)是一致的,但它们有时与我们人类大脑自然处理问题的方式并不一致。因此,在此基础上的抽象级别通常允许我们“缩小”并将问题作为一个整体来看待,如果有工具可以这样做,我们通常会找到一个更整洁的解决方案


因此,如果不知道这段代码的上下文,就不存在“等价物”,至少不是惯用的。我没有特别提到原子,原子是clojure保持和改变状态的机制之一,因为它们肯定不适用于这段代码。

更多上下文?在迭代
J
(等于长度
(count(first src))
)时是否使用此选项?如果是,将严重影响建议。更多上下文?在迭代
J
(等于长度
(count(first src))
)时使用此选项。如果使用此选项,将严重影响建议。