我之前创建了一个递归函数来查找列表的产品.现在我已经创建了相同的功能,但使用了reduce函数和lamdba.
当我运行此代码时,我得到了正确的答案.
items = [1, 2, 3, 4, 10]
print(reduce(lambda x, y: x*y, items))
Run Code Online (Sandbox Code Playgroud)
但是,当我给出一个空列表时,会发生错误 - reduce() of empty sequence with no initial value.为什么是这样?
当我创建递归函数时,我创建了处理空列表的代码,reduce函数的问题只是它不是为了处理和清空列表而设计的吗?或者还有其他原因吗?
我似乎无法在网上找到问题或任何解释原因的问题,我只能找到解决该特定人员问题的问题,无需解释.
所以我有这个功能:
fn (f,g,x) => g(f(x));
这个函数的类型是:
('a -> 'b) * ('b -> 'c) * 'a -> 'c
函数是否表示f表示'a,g表示'b,x表示'c?在那种情况下,怎么会('a -> 'b)出现?因为这不代表f - > g?
如果这是一个模糊而写得不好的问题,请道歉.
有人可以向我解释如何计算该函数的类型吗?
谢谢.
我试图找出这些类型的多态性之间的差异。我找不到有关Ad-Hoc多态性的资料。
我想说多态性是参数多态性,但通常仅称为多态性?我是否正确地假设了这一点?
我知道可以在继承中使用多态,但是我不确定它可以提供哪些其他属性。
如果有人可以帮助定义这些类型的多态性并尝试给出明显的差异,那将是很好的。
谢谢!
注意:Python中的每个示例都很棒。
Scala Tour Of Scala 文档以 whileLoop 函数为例解释了按名称传递的参数。
def whileLoop(condition: => Boolean)(body: => Unit): Unit =
if (condition) {
body
whileLoop(condition)(body)
}
var i = 2
whileLoop (i > 0) {
println(i)
i -= 1
} // prints 2 1
Run Code Online (Sandbox Code Playgroud)
该部分解释了如果不满足条件,则不会评估主体,从而通过不评估未使用的代码主体来提高性能。
Scala 的实现是否while已经使用了按名称传递的参数?
如果有原因或特定情况导致实现无法使用按名称传递参数,请向我解释,到目前为止我还没有找到任何相关信息。
编辑:根据 Valy Dia(/sf/users/407844461/)的回答,我想添加另一个问题......
如果在某些情况下可能根本不评估主体,while 语句的方法实现是否会比语句本身性能更好?如果是这样,为什么要使用 while 语句呢?
我将尝试对此进行测试,但我是 Scala 的新手,因此可能需要一些时间。如果有人愿意解释,那就太好了。
干杯!
adhoc ×1
function ×1
lambda ×1
list ×1
pass-by-name ×1
polymorphism ×1
python ×1
reduce ×1
scala ×1
sml ×1
types ×1
while-loop ×1