scalaの本も読んでみた。機能豊富で、なかなか本を読むのも大変。。
10章で2Dレイアウトライブラリーなるものを構成し、最後に
P.203で、螺旋模様をつくるプログラムがでていた。
何の説明もないので、最初は見ても良く分からなかったが
ネットでの説明なども参考にしながら何とか解決。
object Spiral {
val space = elem(" ")
val corner = elem("+")
def spiral(nEdges:Int, direction: Int):Element = {
if(nEdges == 1) elem("+")
else{
val sp = spiral(nEdges -1, (direction + 3) % 4)
def verticalBar = elem('|', 1, sp.height)
def horizontalBar = elem('-', sp.width, 1)
if(direction == 0)
(corner beside horizontalBar) above (sp beside space)
else if(direction == 1)
(sp above space) beside (corner above verticalBar)
else if(direction == 2)
(space beside sp) above (horizontalBar beside corner)
else
(verticalBar above corner) beside (space above sp)
}
}
def main(args:Array[String]) {
val nSides = args(0).toInt
println(spiral(nSides, 0))
}
}
(direction + 3) % 4のところで、directionは最初0でその後、3,2,1,0,,,を繰り返すことで
上辺、左辺、下辺、右辺をつなげていく動作をしているようだ。
spの中身は再帰的になっているので、spの中に内側の螺旋があり、その中にまた内側の螺旋があり、、を繰り返すということになるようです。
0 件のコメント:
コメントを投稿