progs/lecture4.scala
author Christian Urban <urbanc@in.tum.de>
Tue, 27 Nov 2018 21:41:59 +0000
changeset 218 ae788eeea8a0
child 222 ec9cbf969edf
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
218
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     1
def distinctBy[B, C](xs: List[B], f: B => C, acc: List[C] = Nil): List[B] = xs match {
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     2
  case Nil => Nil
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     3
  case (x::xs) => {
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     4
    val res = f(x)
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     5
    if (acc.contains(res)) distinctBy(xs, f, acc)  
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     6
    else x::distinctBy(xs, f, res::acc)
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     7
  }
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     8
} 
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     9
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    10
ae788eeea8a0 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    11