4차시 수업에 해당하는 내용이자 저 긴 제목의 마지막!!!!!
▶ Conditional Expression
If-else
형식 : if (b) e1 else e2
b : Boolean expression
e1, e1 : same type
if (true) e1 else e2 -> e1
if (false) e1 else e2 -> e2
def abs(x:Int) = if (x>=0) x else -x
▶ Boolean Expressions
true / false
!b
b && b
b || b
&& : AND 연산자 ( 둘다 true 여야 true 출력)
| | : OR 연산자 (둘중 하나라도 true면 true 출력)
! : NOT 연산자
a >= b
a > b
a <= b
a < b
a == b
a != b
그 외에 이런 비교연산자도 사용한다.
Rewrite rule은 타이핑 귀찮아서 슬라이드 캡쳐본으로 보자
제일 아래 예시를 보면 && , || 연산시에도 왼쪽부터 true, false를 판단하는 것을 알 수 있다.
하지만 CBV가 디폴트라서 지금 오른쪽 operand에 있는 loop를 value로 만들지 못해서 true, false 판단은 못하고 있다
스칼라에서는 연산 &&, || 대신해서 and , or 연산을 해주는 함수가 있다
and (x,y)
or (x,y)
and (false, loop ==1 )
~ if (false) loop ==1 else false
~ false
and (true, loop ==1)
~ if (true) loop==1 else false
~loop ==1 ~ loop==1 ~ ... ~
def and(x:Boolean, y:Boolean):Boolean = if (x) y else false
and 연산 기능을 해주는 함수는 아마 위의 코드로 만들어진 것 같다.
(and에서는 왼쪽 operand가 false이면 오른쪽에 관계없이 false니까!!!)
def or(x:Boolean, y:Boolean):Boolean = if (!x) y else true
or 연산 기능을 해주는 함수 코드를 짜봤다. 왼쪽 operand가 true면 오른쪽에 관계없이 true고, 왼쪽 operand가 false면 오른쪽 operand의 boolean 값을 따라가는 걸 구현한 것이다.
교수님이 주신 코드
def and(x:Boolean, y: =>Boolean)=
if (x) y else false
def or(x:Boolean, y: =>Boolean)=
if (x) true else y
▶ Exercise : square root calculation
Newton's Method에 대한 간략한 이해를 돕기위한 사진이다.
제곱근을 찾기 위해 접선을 이용해서 구하는 과정이다.
일단 exercise문제는 다음과 같다.
나의 풀이
def isGoodEnough (guess :Double, x:Double) =
def num = guess*guess/x
if (num>0.99999 && num<1.0000001) true else false
def improve(guess:Double, x:Double) =
(guess + x/guess) /2
def sqrtlter(guess:Double, x:Double) =
if (isGoodEnough(guess,x))
guess
else
guess = improve(guess,x)
sqrtlter(guess,x)
def sqrt(x:Double) =
sqrtlter(1,x)
sqrt(2)
교수님께서 주신 모범답안과 비교
/* 내가 쓴 코드
def isGoodEnough (guess :Double, x:Double) =
def num = guess*guess/x
if (num>0.99999 && num<1.0000001) true else false
*/
def isGoodEnough (guess:Double, x:Double) =
guess*guess/x > 0.999 && guess*guess/x<1.001
//if 없이도 그냥 알아서 true false를 내어준다..
/* 내가 쓴 코드
def sqrtlter(guess:Double, x:Double) =
if (isGoodEnough(guess,x))
guess
else
guess = improve(guess,x)
sqrtlter(guess,x)
*/
def sqrtlter(guess:Double, x:Double) =
if(isGoodEnough(guess,x)) guess
else sqrtlter(improve(guess,x),x)
이렇게 해서 4차시 9/13 수업까지 끗 !
'프로그래밍 > Scala' 카테고리의 다른 글
HW 1. Exercise 3 (0) | 2022.10.02 |
---|---|
Recursion / Tail Recursion (0) | 2022.10.01 |
HW1. Exercise 2 (1) | 2022.09.30 |
PART 1 - Blocks and Name Scoping (1) (0) | 2022.09.29 |
Scala 란 (0) | 2022.09.28 |