什么是+;=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))
)时使用此选项。如果使用此选项,将严重影响建议。