我刚刚开始学习Scala和函数式编程,我正在尝试将以下内容从Python转换为Scala:
def immutable_iterative_fibonacci(position):
if (position ==1):
return [1]
if (position == 2):
return [1,1]
next_series = lambda series, _: series + [series [-1] + series [-2]]
return reduce(next_series, range(position - 2), [1, 1])
我不知道Scala中reduce的等价物是什么。这就是我目前所拥有的。除了最后一行,一切都很好。在
^{pr2}$
Python^{} 摘要,供参考:
可穿越
一个好的类型是^{} ,它是
ArrayBuffer
的超类型。你可能只需要仔细研究一下这个API,因为里面有很多有用的东西。在减少
当省略} :
^{pr2}$initializer
参数时,Python的reduce
是Scala的^{Python函数中的}。在
iterable
参数对应于Traversable
实例,Python函数中的function
参数对应于{注意,还有一些名为}的方法,它们相似,但略有不同。在
reduce
、reduceRight
、reduceLeftOption
和{折叠
您的示例提供了一个} :
initializer
参数,它对应于Scala的^{Python函数中的
initializer
参数对应于foldLeft
中的z
参数。在再次注意,有一些相关的方法被命名为}。在
fold
和{斐波那契
在不更改算法的情况下,以下是代码的清理版本:
一些其他注释:
return
关键字match
关键字所做的)通常被认为比if
-else
链更干净var
(允许多个赋值)替换为val
(不允许)ArrayBuffer
)。Vector
是一个很好的通用不可变序列。在当我们讨论集合和斐波纳契系列时,为了好玩,您可能想看看^{} 文档中的第一个示例:
相关问题 更多 >
编程相关推荐