code

2016年11月19日 星期六

Scala筆記 30 - Loops

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 )

神奇,我不會做!想一下之後補上!

For Loop

之前已經用過for expression,這實際上是collection中的foreach method來implement的:



沒有留言:

張貼留言