view chapter10/Spiral.scala @ 0:b316eec6fa7a draft default tip

add sample files
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 08 Jan 2013 16:41:46 +0900
parents
children
line wrap: on
line source

import Element.elem

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))
    }
}