4월, 2013의 게시물 표시

소수 계산

val primeStream:Stream[Int] = 2 #:: Stream.from(3, 2).filter(i => primeStream.takeWhile(j => j*j i%k != 0)) stackoverflow 에 올라와 있는 scala의 소수(prime) stream 예제 위 코드를 한글로 번역하면 2와 3 이상의 홀수 중에서 제곱해서 자신보다 작은 이미 찾아낸 소수들 모두로 나누어지지 않는 수가 된다. val로 정의되어 있으므로 이미 찾아낸 값을 다시 계산하지 않는다. 2 3 - 2*2 5 - takeWhile에서 선택되는 소수는 2. 2는 5%2!=0을 만족하므로 채택 7 - takeWhile에서 선택되는 소수는 2. 2는 7%2!=0을 만족하므로 채택 9 - takeWhile에서 선택되는 소수는 2,3. 9%3 == 0이므로 채택되지 않음 11 - takeWhile에서 선택되는 소수는 2,3. 2,3 모두 11 나누면 나머지가 있으므로 채택 위의 방식으로 계속 찾아내게 된다.

OSX에서 Octave 설치

brew가 설치된 상태에서 % brew install octave # octave 받고 필요한 패키지들을 설치함. terminal에서 octave 실행시키고 명령어 내려볼 수 있다. graph 함수 실행시키면 동작하지 않는다. XQuartz 받아서 설치하고 다음의 명령어들을 실행 % brew install gnuplot # gnuplot과 필요 패키지들 설치 % cat ~/.octaverc # 홈 디렉토리에 .octaverc 파일을 만들고 내용을 다음과 같이 설정 setenv GNUTERM x11 이후 plot 명령 실행시키면 화면에 그래프 표시된다.

Scala에서 Tuple의 zipped

Scala 2.10.1 val a = List.range(1, 4) // List(1,2,3) val b = List.range(10, 40, 10) // List(10,20,30) a zip b // List((1, 10), (2, 20), (3, 30)) a zip b map ((x,y) => x+y) // ERROR : wrong number of parameters, expected 1 a zip b map (((x, y)) => x+y) // ERROR : not a legal formal parameter a zip b map (Tuple2(x,y) => x+y) // ERROR : not a legal formal parameter (a, b).zipped.map(_+_) // List(11, 22, 33) val c = List.range(100, 400, 100) // List(100, 200, 300) a zip b zip c // List(((1,10), 100), ((2, 20), 200), ((3, 30), 300)) a.zip(b, c) // ERROR : too many arguments (a, b, c).zipped.toList // List((1, 10, 100), (2, 20, 200), (3, 30, 300)) (a, b, c).zipped.map(_+_+_) // List(111, 222, 333)