エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

再帰定義

Scala再帰的に定義する方法がわからん、という話。

Haskell

a = 0:[x+1 | x <- a]

と書けるのをScalaに持っていって

def a:List[Int] = 0::((for(i <- a) yield { i+1})  toList)

と書くと、定義はできるんだけど実行するとStackOverFlowErrorがでる。

わからん。

追記

id:kmizushimaさんがコメントして(トラックバック送って)くださいました。ありがとうございます!!

実はこれScalaでやりたくて考えていたところです。おかげで実現することができました。

object Main
{
    val a:Stream[String] = Stream.cons("1", for(x<-a; y<-List("0", "1")) yield x+y)
    val bin = Stream.cons("0", a)

    def main(args: Array[String])
    {
        println(bin(10))
        println(bin(100))
    }
}