- 제출방법 : 작성한 코드를 ‘hw4.scala’라는 이름으로 저장한 후 아래 출력 화면을 캡쳐한 이미지와 함께 압축하여 ‘학번_hw4.zip’ 로 저장하세요. 압축된 파일을 이루리 과제 게시판에 업로드하면 됩니다.
- 제출기한 : 5월 9일 토요일 11:59pm
과제 진행 시 어려운 점이 있으면 이루리 게시판을 이용해 질문하세요.
Hint: Scala에서는 아래와 같이 트리 자료구조를 정의하고 사용할 수 있습니다.
sealed trait Tree[Int]
case class Leaf[Int](elem: Int) extends Tree[Int]
case class Node[Int](elem: Int, left: Tree[Int], right: Tree[Int]) extends Tree[Int]
val tree = Node(7, Node(3, Leaf(1), Leaf(2)), Leaf(4))
- 자기호출 함수를 사용하여 트리에 존재하는 모든 정수 노드 값의 총합을 구하는 함수를 만들어보세요.
def sum_tree( t: Tree[Int]): Int = {
//재귀함수를 이용하여 트리의 합을 구하세요.
}
출력 예시(위의 트리를 입력으로 사용했을 때):
- 자기호출 함수를 사용하여 트리의 깊이을 구하는 함수를 만들어보세요.
def depth(t: Tree[Int]): Int ={
//재귀함수를 이용하여 트리의 깊이를 구하세요.
}
출력 예시(위의 트리를 입력으로 사용했을 때):
- 자기호출 함수를 사용하여 이진 검색(binary search)을 통해 정수 $x$를 이진 트리 $t$로부터 검색하고 정수 $x$가 존재하면 true, 존재하지 않으면 false를 반환하는 함수를 만들어보세요.
def bin_search(t: Tree[Int], x: Int):Boolean = {
// 재귀함수를 이용하여 이진 검색을 수행합니다.
}
출력 예시(위의 트리와 정수 3을 입력으로 사용했을 때):
- 자기호출 함수를 사용하여 곱하기, 더하기, 뺴기, 나누기, 나머지 연산자로 구성된산술식을 계산하는 함수를 만들어보세요.
def interp(exp: Exp[Int]): Int = {
// 재귀함수를 사용하여 함수를 작성하세요.
}
[입출력 예]
입력 예시:
val exp = ADD(SUB(INT(100), INT(10)), MUL(INT(2), INT(8)))
출력 예시:
- 자기호출 함수를 사용하여 논리식을 계산하는 함수를 만들어보세요. 논리식에는 논리 연산자 AND, OR, NEGATION, IMPLICATION가 사용될 수 있으며 각각의 논리 연산자에 대한 진리표(truth table)는 여기를 참고하세요.
작성할 함수:
def formula(fma: Bool): Boolean = fma match {
// 재귀함수를 사용하여 Neg, Or, And, Imply 논리 연산자로 구성된 논리식을 계산하는 함수를 만드세요
}
[입출력 예] 입력 예시:
val fma = Imply(And(True, Or(True, False)), False)
출력 예시: