help rewriting in functional style

后端 未结 5 2144
再見小時候
再見小時候 2021-02-10 10:46

I\'m learning Scala as my first functional-ish language. As one of the problems, I was trying to find a functional way of generating the sequence S up to n places. S is defined

5条回答
  •  梦毁少年i
    2021-02-10 11:12

    Here's an attempt from a Scala tyro. Keep in mind I don't really understand Scala, I don't really understand the question, and I don't really understand your algorithm.

    def genX_Ys[A](howMany : Int, ofWhat : A) : List[A] = howMany match {
        case 1 => List(ofWhat)
        case _ => ofWhat :: genX_Ys(howMany - 1, ofWhat)
    }
    
    def makeAtLeast(startingWith : List[Int], nextUp : Int, howMany : Int, minimumLength : Int) : List[Int] = {
        if (startingWith.size >= minimumLength) 
          startingWith 
        else 
          makeAtLeast(startingWith ++ genX_Ys( howMany, nextUp), 
                     nextUp +1, howMany + (if (nextUp % 2 == 1) 1 else 0), minimumLength)
    }
    
    def genSequence(numItems: Int) =  makeAtLeast(List(1), 2, 2, numItems).slice(0, numItems)
    

    This seems to work, but re-read the caveats above. In particular, I am sure there is a library function that performs genX_Ys, but I couldn't find it.

    EDIT Could be

    def genX_Ys[A](howMany : Int, ofWhat : A) : Seq[A]  = 
       (1 to howMany) map { x => ofWhat }
    

提交回复
热议问题