7월, 2013의 게시물 표시

scala에서 processing 사용하기

Scala에서 processing을 사용하는 예제들이 있는데 시험해 보면 size 명령이 제대로 동작하지 않는 경우가 있다. 보통 첫번째 방법을 많이 사용하는데 setup에서 size 명령이 제대로 먹히지 않는 반면 두번째 방법을 사용하니 제대로 동작한다. Windows 시스템에 한정된 일인지는 명확하지 않다. import processing.core._ object Test extends PApplet { private var test:Test = _ def main(args: Array[String]) = { test = new Test val frame = new javax.swing.JFrame("Test") frame.getContentPane().add(test) test.init frame.pack frame.setVisible(true) } } class Test extends PApplet { override def setup() = { } override def draw() = { } } import processing.core._ object Test { def main(args: Array[String]) = PApplet.main(Array[String]("Test")) } class Test extends PApplet { override def setup() = { } override def draw() = { } }

순열 만들기

Scala에서 순열을 만드는 2가지 방식을 생각해 볼 수 있겠습니다. 물론 더 여러가지가 있을 수 있겠지만... 1. 한번에 숫자 하나씩 처리하기 인자로 받은 리스트의 항목을 하나씩 가지고 결과물을 만들어 나가는 방법입니다. 매번 리스트 항목에서 하나를 선택해서 이미 만들어진 리스트의 앞, 중간, 뒤에 그 항목을 끼워넣습니다. List(1, 2, 3), List() -> List(2, 3), List(List(1)) -> List(3), List(List(2, 1), List(1, 2)) -> List(), List(List(3, 2, 1), List(2, 3, 1), List(2, 1, 3), List(3, 1, 2), List(1, 3, 2), List(1, 2, 3)) def permutation[A](xs:List[A]):List[List[A]] = { def mutate(x:A, ys:List[A]):List[List[A]] = { // ys의 앞, 중간, 뒤에 x를 끼워넣은 리스트를 반환 def helper(zs:List[A], prev:List[A], acc:List[List[A]]):List[List[A]] = zs match { case Nil => (ys :+ x)::acc case z::zs1 => helper(zs1, prev :+ z, (prev ++ (x::zs))::acc) } helper(ys, List(), List()) } def helper(ys:List[A], acc:List[List[A]]):List[List[A]] = ys match { case Nil => acc case y::ys1 => helper(ys1, acc.flatMap(mutate(y, _))) } helper(xs, List(Nil)) } ...