주어진 술어(predicate)와 부함하는 List의 앞 요소들을 제거하는 함수 dropWhile 을 구현하라(2) def dropWhile[A](as: List[A])(f: A => Boolean): List[A] = as match { case Cons(x, xs) if (f(x)) => dropWhile(xs)(f) case _ => as }회고.스칼라의 타입추론을 위해 매개인자를 둘로 분리하였음. 프로그래밍/Scala 2015.08.11
한 List의 마지막 요소를 제외한 모든 요소로 이루어진 List를 돌려주는 함수 init을 구현하라. def init[A](as: List[A]): List[A] = as match { case Cons(x, xs) => { if (xs == Nil) { Nil } else { Cons(x, init(xs)) } } }회고.이상하게 많이 헤맨 문제다. 재귀로 List를 순회하면서tail이 Nil이면 , 즉, List의 마지막 요소면 마지막 요소를 Nil 로 리턴. 프로그래밍/Scala 2015.08.10
주어진 술어(predicate)와 부함하는 List의 앞 요소들을 제거하는 함수 dropWhile 을 구현하라 def dropWhile[A](as: List[A], f: A => Boolean): List[A] = as match { case Cons(x, xs) => { if (f(x)) dropWhile(xs, f) else xs } }회고.List 전체 요소를 재귀로 순회하면서 인자로 주어진 함수를 호출하여 참이면 List의 다음요소로 교체 프로그래밍/Scala 2015.08.10
목록에서 처음 n개의 요소를 제거하는 함수 drop을 구현하라 def drop[A](as: List[A], n: Int): List[A] = as match { case Cons(_, xs) => { if (n >= 0) drop(xs, n - 1) else xs } }회고.리스트의 head가 무엇이든 간에n번만큼 tail로 교체. 프로그래밍/Scala 2015.08.10
List의 첫 요소를 다른 값으로 대체하는 함수 setHead를 구현하라 def setHead[A](as: List[A], head: A): List[A] = as match { case Cons(_, xs) => Cons(head, xs) }회고. 리스트의 head 요소가 어떤것이든 무조건 head로 바꿈. 재귀가 없으니 첫번째 요소만 head로 바뀜 프로그래밍/Scala 2015.08.10
List의 첫요소를 제거하는 함수 tail을 구현하라. def tail[A](as: List[A]): List[A] = as match { case Nil => Nil case Cons(_, xs) => xs }회고.List의 첫요소가 뭐든지 간에 그 뒷 요소를 리턴해주면 끝. 프로그래밍/Scala 2015.08.10
함수적 자료구조 단방향 연결 리스트 package kwo2002.scala /** * Created by kwo2002 on 2015-08-04. */ sealed trait List[+A] case object Nil extends List[Nothing] case class Cons[+A](head: A, tail: List[A]) extends List[A] object List { def sum(ints: List[Int]): Int = ints match { case Nil => 0 case Cons(x, xs) => x + sum(xs) } def product(ds: List[Double]): Double = ds match { case Nil => 1.0 case Cons(x, xs) => x * product(xs) } d.. 프로그래밍/Scala 2015.08.10
스칼라의 자료구조 공부중 - 자바와의 비교. 스칼라의 단방향 연결 리스트를 보다가, 자바로 먼저 구현해봐야겠다는 생각에 자바로 초간단 단방향 연결 리스트를 구현해보았다. package kwo2002.java; /** * Created by kwo2002 on 2015-08-06. */ public class SingleNode { private SingleNode next; private E e; public SingleNode(E e) { e = this.e; } public SingleNode(E e, SingleNode next) { e = this.e; next = this.next; } public void appendToTail(E e) { SingleNode end = new SingleNode(e); SingleNode current.. 프로그래밍/Scala 2015.08.06
한 함수의 출력을 다른 함수의 입력으로 공급하는 합성 함수를 구현하라 def compose[A, B, C](f: B => C, g: A => B): A => C = { a => f(g(a)) }회고.특별히 어려운 점 없이 해결. 프로그래밍/Scala 2015.08.04
curry의 변환을 역으로 수행하는 고차 함수를 구현하라. def uncurry[A, B, C](f: A => B => C): (A, B) => C = { (a, b) => f(a).apply(b) }회고.좀 헤맸다. a와 b를 인자로 받으면,함수 f를 호출하여 결과로 B를 인자로 받고 C를 리턴하는 함수를 리턴 받고,리턴 받은 함수에 b를 인자로 넘겨서 C를 리턴 받도록 처리함. 풀고보니 간단한데, 함수형 프로그래밍에 익숙치 않아서 헤맸던듯.. 프로그래밍/Scala 2015.08.04