6

最高の機能的な方法で Queue を使用する方法を知りたいです。たとえば、要素をデキューし、再帰関数でそれらを出力したいと思います。そして、私は最も美しい機能が欲しいです。

たとえば、これは私が望むことを行う関数です。しかし、私はifが嫌いです。

Queue を使用するより良い方法ですか?

import scala.collection.immutable.Queue

def printQ[A](p:Queue[A]) {
  if(!p.isEmpty) {
    p.dequeue match { 
      case (x,xs) => 
        println(x.toString) 
        printQ(xs) 
      case _ => 
        println("End")    
    }
  }    
}

printQ(Queue(1,2,4,5))

回答ありがとうございます。

4

2 に答える 2

3

QueueメソッドはありませんdequeueOption。これにより、多少改善されます。ただし、一致の最初のエントリは網羅的であることに注意してください。println("End")コードに到達することはできません。したがって、バージョンを改善できます。

def printQ[A](p: Queue[A]) {
  if (!p.isEmpty) p.dequeue match {
    case (x,xs) =>
      println(x.toString)
      printQ(xs)
  }
}

もちろん、これはキューを順番にトラバースするだけなので、いつでも

p.foreach(println)

すべてを印刷します。

于 2012-04-05T11:03:10.470 に答える
2

以下についてテストする必要はありませんcase _

scala> @annotation.tailrec def printQ[A](p:Queue[A]) {
     |   if(!p.isEmpty) {
     |     p.dequeue match {
     |       case (x,xs) =>
     |         println(x.toString)
     |         printQ(xs)
     |     }
     |   }
     | }
printQ: [A](p: scala.collection.immutable.Queue[A])Unit

scala> printQ(Queue(1,2,4,5))
1
2
4
5

関数が再帰的である必要はありますか?

scala> for (i <- Queue(1, 2, 4, 5)) println(i)
1
2
4
5
于 2012-04-05T11:02:42.810 に答える