전체 글 105

Scala의 지연 콜렉션 Stream 기본 문법

1. 스트림끼리 연결Stream(1, 2) #::: Stream(3, 4) // Stream(1, 2, 3, 4) 2. 우측 스트림의 요소로 삽입100 #:: Stream(3, 4) // Stream(100, 3, 4) 3. 우측 스트림의 요소로 삽입 2 Stream.cons(Stream(1, 2), Stream(3, 4)) // Stream(Stream(1, 2), 3, 4) 4. 빈 스트림Stream.empty // 새로운 빈 스트림 Stream.Empty // 패턴 매칭 case문에서 사용 5. 시드값으로부터 일정 수만큼 더해져 나가는 스트림Stream.from(1, 2) // Stream(1, 3, 5, 7 ...) 6. 시드값으로부터 계산되어가는 스트림Stream.iterate(2)(s => s..

Scala 2017.02.10

Scala에서 꼬리재귀와 트램폴린, Stream

함수형 = 재귀함수는 아니지만 재귀함수를 많이 사용한다는 것은 틀림없을 것이다.하지만 컴퓨터 프로그램의 구조상 함수를 호출할 때마다 스택에 값들이 쌓여 StackOverFlow를 피할 수 없다. 이 친숙한 스택오버플로를 피하기 위한 방법들이 있다.꼬리재귀와 트램폴린, 지연 콜렉션 Stream이다. 사실 스트림은 스택오버플로를 피하기 위한 방법은 아니다.하지만 스택오버플로가 발생할 수 있는 문제에서 스트림을 사용, 더 이른 스택 복귀를 통해(혹은 다른 방법으로의 접근) 문제를 해결한 경험이 있어 함께 적어둔다. 1. 꼬리재귀(Tail Recursive)꼬리재귀는 어떤 함수가 자기 자신을 호출하되 그 호출이 함수의 마지막 연산인 경우를 말한다.꼬리재귀는 아주 쉽게 반복문으로 변경할 수 있다. 많은 함수형 프..

Scala 2017.02.09

SBT Jar Build

SBT로 JAR 파일을 만들기 위해서는 assembly라는 것이 필요하다. 링크 건 깃허브에 잘 되어 있지만... 1. project 폴더 안에 assembly.sbt 파일 생성 1addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")cs 2. build.sbt 파일에 빌드 옵션 및 mainClass 설정 123scalacOptions ++= Seq("-unchecked", "-deprecation", "-Xcheckinit", "-encoding", "utf8") mainClass in assembly := Some("MainObject")Colored by Color Scriptercs 3. sbt console에서 'assembly' 명령 실행 -> 프..

Scala 2016.12.29

JavaFX with Scala?

자바FX는 fxml이나 어노테이션 덕분에 코드가 그렇게까지는 더러워지지 않지만 그래도 스칼라보다 많은 코딩을 요구할 수 밖에 없을 것 같다. 그래서 스칼라로 자바FX 어플리케이션을 만들어보고자 했다. 빌드 툴 SBT와 Gradle, 두가지 측면에서 생각해 보았는데 결론적으로 자바FX로 작은 용량의 어플리케이션을 작성할 예정이라면 스칼라를 사용하지 않는 것이 낫다. 용량 비교를 위해 그냥 버튼 하나 띄워져 있는 어플리케이션을 작성해 보았다. 1. Gradle, 자바FX 2. Gradle, 스칼라 컴파일러 디펜전시 추가해서 빌드 3. SBT, 스칼라 스칼라FX를 사용했을 경우. 메인 페이지의 Example을 사용한 것인데, FXML을 사용하기 위해서는 스칼라 매크로 디펜전시가 필요하다. 그 때는 용량이 더 ..

Scala 2016.12.29