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



Posted by '김용환'
,