2016-05-14 31 views
0

的(我< -1〜100 [在這裏,我想這在程序運行期間改變條款])是否有可能通過子句中指定動態

所以,說,我有一個變量這是目前輪到的期望差距。我用while循環重寫了它,但是有沒有機會用構造來完成它。

var gap = 1 
for(i<-1 to 100 by gap) 
gap+=1 
+0

如何差距的變化?以某種可預測的/可編碼的方式,還是動態的,取決於循環中發生的事情? –

+0

根據循環中計算出的某些條件,每次循環中都會在for循環內改變間隙。 – Dmitrii

回答

0

這裏有一個回答您的實際問題,您的評論如下:

doSteps需要開始和你的範圍的結束,對於計算的初始值,並接受計算的當前值的塊,和範圍中的當前索引,並返回更新的計算和下一個要使用的索引。

def doSteps[T](start: Int, end: Int)(z: T)(f: (T, Int) => (T, Int)): T = 
    { 
     if (start < end) { 
     val (newz, newStart) = f(z, start) 
     doSteps(newStart, end)(newz)(f) 
     } else 
     z 
    } 

(你可以很容易地改變它返回下gap - 只是改變doSteams(start + newStart)遞歸調用)

例子:

import scala.util.Random 
    doSteps(1, 100)("a") 
    { (acc, i) => print(s"$i ") 
     (acc + Random.nextPrintableChar(), i + Random.nextInt(5)) } 
    //> 1 4 4 8 9 10 12 15 15 17 17 21 24 25 25 29 30 32 35 36 36 40 42 46 49 53 57 
    //| 58 61 61 65 69 72 76 79 83 83 85 86 88 91 95 97 
    //| res0: String = a|^on3H-]>Zh]e;R(q3pTB9BQ9Y>p.Q&~_5a?~33ze{w 
0

目前尚不清楚你的要求,但要注意以下表明gap可編程:

scala> for (gap <- 1 to 5) { 
    | for (i <- 1 to 100 by gap) { 
    | if (i % 10 == 0) println(s"gap: $gap i: $i") } } 
gap: 1 i: 10 
gap: 1 i: 20 
gap: 1 i: 30 
gap: 1 i: 40 
gap: 1 i: 50 
gap: 1 i: 60 
gap: 1 i: 70 
gap: 1 i: 80 
gap: 1 i: 90 
gap: 1 i: 100 
gap: 3 i: 10 
gap: 3 i: 40 
gap: 3 i: 70 
gap: 3 i: 100 
0

by就像任何其他方法的方法。和其他方法一樣,它所採用的參數不一定是文字,它可以是任何有效的Scala表達式,例如字段引用,方法調用或任意更復雜的表達式。

相關問題