While Loop
mutable variable已經能做到所有imperative programming的事,現在要介紹control structure: loop。在Scala中,while是一個key word,但事實上我們也可以用pure functional的方式來定義while:
def WHILE(condition: => Boolean)(command: => Unit): Unit = if (condition) { command WHILE(condition)(command) } else ()
注意condition要call by name,這樣才能在每次deference的時候重新被evaluate,要不然真的變成無窮迴圈了。另外這是一個tail recursion,所以是constant stack size,跟imperative programming中的while一樣。
我們也可以模擬出do-while (但是這邊是while condition is not met),課堂中稱為repeat:
def REPEAT(condition: => Boolean)(command: => Unit): Unit = { command if (!condition) REPEAT(condition)(command) } var x = 1REPEAT( x >= 5 ) { x = x + 1; println(x) }
另外模擬repeat-untill,要能寫出以下這種形式:
REPEAT {
command
} UNTIL ( condition )
神奇,我不會做!想一下之後補上!
沒有留言:
張貼留言