如何像F#代码那样利用序列在Scala中实现迭代器?
我想知道对于这个简短的F#代码片段,等效的Scala代码是什么: 在Scala中真的有可能有这样的东西吗如何像F#代码那样利用序列在Scala中实现迭代器?,scala,f#,iterator,lazy-evaluation,seq,Scala,F#,Iterator,Lazy Evaluation,Seq,我想知道对于这个简短的F#代码片段,等效的Scala代码是什么: 在Scala中真的有可能有这样的东西吗 不过,我实际尝试实现的内容在以下代码中显示: module BST = type t = | Node of int * t * t | Empty let rec toSeq tree = seq { match tree with | Empty -> () | Node(value
不过,我实际尝试实现的内容在以下代码中显示:
module BST =
type t =
| Node of int * t * t
| Empty
let rec toSeq tree = seq {
match tree with
| Empty -> ()
| Node(value, left, right) ->
yield! toSeq left
yield value
yield! toSeq right
}
我知道如何在Scala中定义有区别的联合(如case-calss),但我不太确定如何实现基于序列的迭代器
如果我没有弄错的话,谢谢你,F#的seq
是构造IEnumerable
惰性实例的语法糖。因此,我能想到的最接近Scala的版本是使用:
BST
案例类节点(值:Int,左:BST,右:BST)扩展了BST
case对象为空扩展了BST
def toSeq(树:BST):流[Int]=树匹配{
case Empty=>Stream.Empty
案例节点(值、左、右)=>
toSeq(左)#:::值#:::toSeq(右)
}
如果我没有弄错的话,F#的seq
是构造IEnumerable
惰性实例的语法糖。因此,我能想到的最接近Scala的版本是使用:
BST
案例类节点(值:Int,左:BST,右:BST)扩展了BST
case对象为空扩展了BST
def toSeq(树:BST):流[Int]=树匹配{
case Empty=>Stream.Empty
案例节点(值、左、右)=>
toSeq(左)#:::值#:::toSeq(右)
}
如果我没有弄错的话,F#的seq
是构造IEnumerable
惰性实例的语法糖。因此,我能想到的最接近Scala的版本是使用:
BST
案例类节点(值:Int,左:BST,右:BST)扩展了BST
case对象为空扩展了BST
def toSeq(树:BST):流[Int]=树匹配{
case Empty=>Stream.Empty
案例节点(值、左、右)=>
toSeq(左)#:::值#:::toSeq(右)
}
如果我没有弄错的话,F#的seq
是构造IEnumerable
惰性实例的语法糖。因此,我能想到的最接近Scala的版本是使用:
BST
案例类节点(值:Int,左:BST,右:BST)扩展了BST
case对象为空扩展了BST
def toSeq(树:BST):流[Int]=树匹配{
case Empty=>Stream.Empty
案例节点(值、左、右)=>
toSeq(左)#:::值#:::toSeq(右)
}
module BST =
type t =
| Node of int * t * t
| Empty
let rec toSeq tree = seq {
match tree with
| Empty -> ()
| Node(value, left, right) ->
yield! toSeq left
yield value
yield! toSeq right
}