在Scala中使用Streams进行排序
发布时间:2020-12-16 18:42:26 所属栏目:安全 来源:网络整理
导读:假设存在序列a [i] = f(a [i-1],a [i-2],… a [i-k]).你会如何使用 Scala中的流编码? 解决方法 可以将它推广到任何k,使用数组用于a和另一个k参数,并且具有f.i.,该函数具有rest …参数. def next(a1:Any,...,ak:Any,f: (Any,Any) = Any):Stream[Any] { val n
假设存在序列a [i] = f(a [i-1],a [i-2],… a [i-k]).你会如何使用
Scala中的流编码?
解决方法
可以将它推广到任何k,使用数组用于a和另一个k参数,并且具有f.i.,该函数具有rest …参数.
def next(a1:Any,...,ak:Any,f: (Any,Any) => Any):Stream[Any] { val n = f(a1,ak) Stream.cons(n,next(a2,n,f)) } val myStream = next(init1,initk) 为了让第1000个做下一个.drop(1000) 更新以显示如何使用varargs完成此操作.请注意,传递的函数没有arity检查: object Test extends App { def next(a:Seq[Long],f: (Long*) => Long): Stream[Long] = { val v = f(a: _*) Stream.cons(v,next(a.tail ++ Array(v),f)) } def init(firsts:Seq[Long],rest:Seq[Long],f: (Long*) => Long):Stream[Long] = { rest match { case Nil => next(firsts,f) case x :: xs => Stream.cons(x,init(firsts,xs,f)) } } def sum(a:Long*):Long = { a.sum } val myStream = init(Seq[Long](1,1,1),Seq[Long](1,sum) myStream.take(12).foreach(println) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |