如何将Mathematica的函数式编程特性巧妙地转化为Ruby中类似注入的长尾编程技巧?
- 内容介绍
- 文章标签
- 相关推荐
本文共计343个文字,预计阅读时间需要2分钟。
是的,Ruby 中的 `inject` 方法与 Mathematica 中的 `Product` 函数有相似之处。例如,如果你想计算列表中元素的乘积,在 Ruby 中你可以使用 `inject` 如下:
rubylist.inject(1) { |prod, el| prod * el }
而在 Mathematica 中,你可以使用 `Product` 函数:
mathematicaProduct[el, {el, list}]
这两个方法都可以实现相同的功能,即计算列表中所有元素的乘积。
是否有像 Ruby注入的Mathematica函数?例如,如果我想要列表中元素的产品,在Ruby中我可以写:list.inject(1) { |prod,el| prod * el }
我发现我可以在Mathematica中使用Product:
Apply[Product, list]
然而,这对我来说不够通用(如果我不只是想要产品或数字的总和).与注射最接近的是什么?
相当于 Fold.我认为这通常被称为“减少” – 无论如何,这就是Python名称.
翻译你的例子:
Fold[#1*#2&, 1, list]
#1 *#2&是一个二进制lambda函数,它的参数倍增.
在这种情况下,您可以使用Times代替:
Fold[Times, 1, list]
或者当然只是将Times应用于列表:
Apply[Times, list]
或者,简而言之:
Times @@ list
注意:您使用Product而不是Times的问题中的版本将不起作用.
Product是其他东西,即Sum的类比.
本文共计343个文字,预计阅读时间需要2分钟。
是的,Ruby 中的 `inject` 方法与 Mathematica 中的 `Product` 函数有相似之处。例如,如果你想计算列表中元素的乘积,在 Ruby 中你可以使用 `inject` 如下:
rubylist.inject(1) { |prod, el| prod * el }
而在 Mathematica 中,你可以使用 `Product` 函数:
mathematicaProduct[el, {el, list}]
这两个方法都可以实现相同的功能,即计算列表中所有元素的乘积。
是否有像 Ruby注入的Mathematica函数?例如,如果我想要列表中元素的产品,在Ruby中我可以写:list.inject(1) { |prod,el| prod * el }
我发现我可以在Mathematica中使用Product:
Apply[Product, list]
然而,这对我来说不够通用(如果我不只是想要产品或数字的总和).与注射最接近的是什么?
相当于 Fold.我认为这通常被称为“减少” – 无论如何,这就是Python名称.
翻译你的例子:
Fold[#1*#2&, 1, list]
#1 *#2&是一个二进制lambda函数,它的参数倍增.
在这种情况下,您可以使用Times代替:
Fold[Times, 1, list]
或者当然只是将Times应用于列表:
Apply[Times, list]
或者,简而言之:
Times @@ list
注意:您使用Product而不是Times的问题中的版本将不起作用.
Product是其他东西,即Sum的类比.

