coursera의 강의 Functional Programming Principles in Scala 4장 강의 중에 Funtional 언어의 특징을 유난히 보였던 예제가 있어서 끄적거려 봤다..
abstract class Boolean {
def ifThenElse[T](t: => T, e: => T): T
def unary_! : Boolean = ifThenElse(False , True)
def && (x: => Boolean): Boolean = ifThenElse(x, False)
def || (x: => Boolean): Boolean = ifThenElse(True, x)
def == (x: Boolean): Boolean = ifThenElse(x, x.unary_!)
def != (x: Boolean): Boolean = ifThenElse(x.unary_! , x)
def < (x: Boolean): Boolean = ifThenElse(False, x)
def > (x: Boolean): Boolean = ifThenElse(x, False)
}
object False extends Boolean {
def ifThenElse[T](t: => T, e: => T) = e
}
object True extends Boolean {
def ifThenElse[T](t: => T, e: => T) = t
}
테스트 결과
True.ifThenElse(println("yes"), println("no")) // yes
False.ifThenElse(println("yes"), println("no")) // no
(! True).ifThenElse(println("yes"), println("no")) // no
(! False).ifThenElse(println("yes"), println("no")) // yes
println
(True && False).ifThenElse(println("yes"), println("no")) // no
(True && True).ifThenElse(println("yes"), println("no")) // yes
(False && True).ifThenElse(println("yes"), println("no")) // no
(False && False).ifThenElse(println("yes"), println("no")) // no
println
(True == True).ifThenElse(println("yes"), println("no")) // yes
(True && True == True).ifThenElse(println("yes"), println("no")) //yes
(False || True != True).ifThenElse(println("yes"), println("no")) //no
println
(False < True).ifThenElse(println("yes"), println("no")) // yes
(False > True).ifThenElse(println("yes"), println("no")) // no
'scala' 카테고리의 다른 글
[scala] mergesort(match) 예제 (0) | 2017.06.29 |
---|---|
[scala] expansion of function value (0) | 2017.06.28 |
[sbt] sbt 버전 확인하기 (0) | 2017.06.26 |
[play2] json-객체 연동 코드 예제 (0) | 2017.06.26 |
[spark] spark streaming job 개발시 유익한 싸이트 (0) | 2017.06.07 |