Skip to content

Instantly share code, notes, and snippets.

@boxp
Last active December 10, 2015 05:18
Show Gist options
  • Save boxp/4386408 to your computer and use it in GitHub Desktop.
Save boxp/4386408 to your computer and use it in GitHub Desktop.
This code is test for scala.
object fibonacci {
def main(args: Array[String]) {
var fibonacci = List(1,1)
while(fibonacci.length < args(0).toInt) {
fibonacci = fibonacci :+ fibonacci.takeRight(2).sum
}
println(fibonacci.apply(args(0).toInt - 1))
}
}
@xuwei-k
Copy link

xuwei-k commented Dec 27, 2012

もとのコードだと、新しいList作っても、代入せずに捨ててるので無限ループ

object fibonacci {
  def main(args: Array[String]) {

  var fibonacci = List(1,1)

  while(fibonacci.length < args(0).toInt) {
    fibonacci :+= fibonacci.takeRight(2).sum
  }

  println(fibonacci.apply(args(0).toInt - 1))
  }
}

これ

fibonacci :+= fibonacci.takeRight(2).sum

は、これ↓

fibonacci = fibonacci :+ fibonacci.takeRight(2).sum

のシンタックスシュガー。なんでそんなシンタックスシュガーがあるのかは、これ
http://d.hatena.ne.jp/xuwei/20110130/1296360331
の後半とか参照。

@boxp
Copy link
Author

boxp commented Dec 27, 2012

なるほど、:+ではもとのリストに要素を加えるのではなく、もとのリストに要素を加えたものを返すだけなのですね。REPLで要素が加わったリストが返ってきたのを見て勘違いしていました^^;

下のシンタックスシュガーについても後でテストコードを書いてみようかと思います。どうもありがとうございます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment