(100 8˝ 50 - programming language laboratory @ postechpl.postech.ac.kr/~gla/cs101/hw/hw6.pdf ·...

10
EECS101 ˜8 /l -/- (100 + ˜ 8 50) $˜$ (kurin@postech) ¨ :5 1| 11:59pm t ¯0X /\ 0l PD \lD t u , /| t ¥\ 8 t)t LD ¨. \ @ POSTECH L0ıY YX ’POSTECH L0ıY X| 0¨. (http://http://www.postech.ac.kr/~gla/cs101/disciplinary/index.html) ·5p tt H tt Pü pPD \'X8. \\ \ ˜ @¨. L, ı@ t J¨. \ ¨8@ ü'Dt'X0 ¨. 1 L'|ü| ø| http://www.postech.ac.kr/~gla/cs101/hw/hw6.mlü http://www.postech.ac.kr/~gla/cs101/hw/hw6-check.ml FTP client <Hemos home folder> /cs101 handin/hw6/hw6.mlü <Hemos home folder> /cs101 handin/hw6/hw6-check.mlD ·$. 2 1 L'| hw6.mlD ·$ Emacs,gvim,¥ü@ \l¤Dt'X L'|D t Lü. exception NotImplemented;; let rec reverse l = raise NotImplemented;; let rec map f l = raise NotImplemented;; let rec altersum l = raise NotImplemented;; let rec collatz_seq n = raise NotImplemented;; let rec remove_duplicate l = raise NotImplemented;; let rec intersection xl yl = raise NotImplemented;; 1

Upload: others

Post on 28-Oct-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

EECS101 전자계산입문 여섯번째 숙제

-리스트-

(100 점 + 도전 문제 점수 50점)

오진오 (kurin@postech)

제출 마감 : 5월 1일 11:59pm

이번 숙제에서는 수업시간에 배웠던 리스트에 대한 기본 개념을 프로그래밍을 통해 익혀 보고, 리스트

를통해가능한문제해결방법에대해서알아봅니다.

• 부정행위에 관한 규정은 POSTECH 전자컴퓨터공학부 학부위원회의 ’POSTECH 전자컴퓨터공학

부 부정행위 정의’를따릅니다.

(http://http://www.postech.ac.kr/~gla/cs101/disciplinary/index.html)

• 숙제가 어렵거나 이해가 안가는 부분이 있다면 교수님과 조교님들을 활용하세요. 최대한 친절히 도

와드립니다. 단, 정답은 가르쳐 드리지 않습니다. 숙제에 관한 질문은 과목게시판을 이용하시기 바

랍니다.

제 1 절 골격파일과 검사파일

웹브라우저에서 http://www.postech.ac.kr/~gla/cs101/hw/hw6.ml과

http://www.postech.ac.kr/~gla/cs101/hw/hw6-check.ml

또는 FTP client에서 <Hemos home folder> /cs101 handin/hw6/hw6.ml과

<Hemos home folder> /cs101 handin/hw6/hw6-check.ml을내려받는다.

제 2 절 숙제 작성법

골격파일 hw6.ml을 내려받고 Emacs,gvim,메모장과 같은 편집프로그램을 이용하여 골격파일을 열면 다

음과같다.

exception NotImplemented;;

let rec reverse l = raise NotImplemented;;

let rec map f l = raise NotImplemented;;

let rec altersum l = raise NotImplemented;;

let rec collatz_seq n = raise NotImplemented;;

let rec remove_duplicate l = raise NotImplemented;;

let rec intersection xl yl = raise NotImplemented;;

1

let rec poly l = raise NotImplemented;;

let rec powerset l = raise NotImplemented;;

(* sum type for DNA *)

type dna = A | T | C | G;;

let rec subsequence xl yl = raise NotImplemented;;

let rec prime_seq n = raise NotImplemented;;

(* Challenge *)

type ’a inf_list = Inf_list of (unit -> (’a * ’a inf_list));;

let inf_hd x = match x with Inf_list y -> let (a,_) = y () in a;;

let inf_tl x = match x with Inf_list y -> let (_,b) = y () in b;;

let rec inf_nth l n = if n = 1 then inf_hd l else inf_nth (inf_tl l) (n - 1);;

let inf_prime_seq () = raise NotImplemented;

문제에서 설명하는 함수를 작성하기 위해, raise NotImplemented를 삭제하고 문제가 요구하는 올

바른 연산식을 채워 넣는다. 예를 들면, 1번 문제의 경우 함수 reverse을 작성하기 위해 함수의 몸

통 연산식인 raise NotImplemented를 지우고, reverse의 올바른 몸통 연산식을 작성한다. 연산식

raise NotImplemented는 함수의 몸통 연산식이 작성되지 않았다는 예외상황을 표시하며, 의미 자체

는본숙제의해결에중요하지않다.

만약올바르게함수를정의할수없다고판단하는경우해당함수의몸통연산식인 raise NotImplemented을

삭제하지 않고 그대로 두어야 한다.

제 3 절 타입 확인 및 제출

문제에 대한 답을 다 작성한 이후, 작성한 숙제파일 hw6.ml의 각 함수가 문제에서 제시한 타입을 만족하

는지 확인하기 위해 다음과 같이 검사파일을 이용한다. 골격파일을 편집하여 숙제를 작성하였으므로 이후

골격파일과숙제파일은동일한파일인 hw6.ml을가리킨다.

• 숙제파일 hw6.ml과검사파일 hw6-check.ml을동일한폴더에위치시킨다.

• 명령 프롬프트([시작]→[프로그램]→[보조 프로그램]→[명령 프롬프트])를 실행한 후, cd명령어를 이

용해숙제파일과검사파일이위치한폴더로이동한다.

• 아래와같이 ocamlc 명령어를이용해숙제파일과검사파일을함께컴파일한다.

ocamlc -o hw6-check.exe hw6.ml hw6-check.ml

컴파일한결과명령 프롬프트에아무런메시지가나타나지않으면작성한함수들이모두올바른타입을

가지고있음을의미한다.

숙제작성을마친후 FTP client를이용하여숙제파일인 hw6.ml을자신의숙제제출디렉토리인

<Hemos home folder> /cs101 handin/hw6/<Hemos id>에저장한다.

2

• 파일 이름은 반드시 hw6.ml이어야 한다. hw6.ml이 아닌 다른 이름의 파일을 제출하면 0점 처리

된다.

• 컴파일되지 않는 숙제는 0점 처리 된다.

제 4 절 문제

• 1, 2번문제에서는 Ocaml의 List 라이브러리의함수를사용하지않는다.

• 3 ∼ 10번문제에서는 List 라이브러리를자유로이사용할수있다.

• List.fold left 또는 List.fold right를 사용한다면 골격파일에서 주어진 rec 키워드를 무시해

도된다.

Question 1. [5점] 리스트의순서를거꾸로하는함수 reverse를작성하라.

(타입) ’a list -> ’a list

(설명) reverse l은 원소의 순서가 거꾸로 되어 있는 새로운 리스트를 반환한다. reverse [a1; a2;

...; an−1; an]은 [an; an−1; ... ; a2; a1]를 반환한다. 예를 들면 [1; 2; 3; 4; 5]라는 리스트

를입력으로받으면 [5; 4; 3; 2; 1]이라는리스트를반환한다.

(주의) Ocaml에서제공하는 List 라이브러리는사용해서는안된다.

(실행예)

# reverse;;

- : ’a list -> ’a list = <fun>

# reverse [1; 2; 3; 4; 5; 6];;

- : int list = [6; 5; 4; 3; 2; 1]

# reverse ["Pink Floyd"; "bluedawn"; "more than paradise"];;

- : string list = ["more than paradise"; "bluedawn"; "Pink Floyd"]

# reverse [1.; 2.; 4.; 5.3; 6.5];;

- : float list = [6.5; 5.3; 4.; 2.; 1.]

# reverse [];;

- : ’a list = []

Question 2. [5점] 함수를리스트각각의원소에적용시키는함수 map을작성하라.

(타입) (’a -> ’b) -> ’a list -> ’b list

(설명) map f l은 l의각원소에함수 f를적용한결과를반환한다. 즉 map f [a1; a2; ... ; an−1; an]은

[f a1; f a2; ... ; f an−1; f an]을반환한다.

(주의) Ocaml에서제공하는 List 라이브러리는사용해서는안된다.

(실행예)

# map;;

- : (’a -> ’b) -> ’a list -> ’b list = <fun>

# map (fun x -> x+2) [1; 2; 3; 4; 5; 6];;

- : int list = [3; 4; 5; 6; 7; 8]

# map (fun x -> not x) [true; false; true; true];;

3

- : bool list = [false; true; false; false]

# map (fun x -> "my favorite band is "^x) ["Mot"; "bluedawn"];;

- : string list =

["my favorite band is Mot"; "my favorite band is bluedawn"]

Question 3. [10점] 리스트 [a1; a2; ...; an]를 입력으로 받아∑n

k=1(−1)k−1ak을 구하는 함수

altersum을작성하라.

(타입) int list -> int

(설명) altersum l은리스트 l의원소의부호를바꿔가며합을구하는함수이다. altersum [a1; a2; ...; an]은∑nk=1(−1)k−1ak을계산한다. 예를들어 altersum [10; 11; 12; 13]은결과값으로 10-11+12-13을계

산하여 -2를반환한다.

(실행예)

# altersum;;

- : int list -> int = <fun>

# altersum [1; 2; 3; 4; 5; 6; 7; 8];;

- : int = -4

# altersum [-10; 10; -10; 10];;

- : int = -40

# altersum [];;

- : int = 0

Question 4. [10점] collatz수열을리스트로반환하는함수를작성하라.

(타입) int -> int list

(설명) k를초항으로가지는 collatz수열 an은다음과같이정의된다.

• a0 = k

• an−1이 1이아닌홀수인경우 an = 3an−1 + 1

• an−1이짝수인경우 an = 12an−1

• an−1이 1인경우수열은종결되며, an은정의되지않는다

collatz seq k는 정수 k를 초항으로 하는 collatz수열을 리스트 형태로 반환한다. 예를 들어, 15를 초항

으로 하는 collatz수열은 15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1 이므로 collatz seq 15는

[15; 46; 23; 70; 35; 106; 53; 160; 80; 40; 20; 10; 5; 16; 8; 4; 2; 1]을 반환한다. 결과

리스트는초항부터시작하여순서대로나열되어있어야한다. 즉 [a0; a1; ...]순이되어야한다.

(가정) k > 0

(실행예)

# collatz_seq;;

- : int -> int list = <fun>

# collatz_seq 10;;

- : int list = [10; 5; 16; 8; 4; 2; 1]

# collatz_seq 15;;

- : int list =

[15; 46; 23; 70; 35; 106; 53; 160; 80; 40; 20; 10; 5; 16; 8; 4; 2; 1]

4

Question 5. [10점] 리스트내에중복되는원소를제거해주는함수 remove duplicate를작성하라.

(타입) ’a list -> ’a list

(설명) remove duplicate l은 리스트 l에서 중복되는 원소를 하나만 남기고 제거한 리스트를 반환한

다. 예를들어 [1; 1; 1; 1]을입력으로받으면 [1]을반환한다. 결과리스트에서원소의순서는중요치

않다. 예를 더 들면 [1; 2; 3; 2]를 입력으로 받으면 [1; 2; 3], [1; 3; 2], [2; 1; 3], [2; 3; 1],

[3; 1; 2], [3; 2; 1] 중하나를반환해야한다.

(실행예)

# remove_duplicate;;

- : ’a list -> ’a list = <fun>

# remove_duplicate [1; 2; 3; 4; 3; 2; 3; 2];;

- : int list = [1; 2; 3; 4]

# remove_duplicate ["a"; "b"; "hi"; "b"; "goldbar"; "hi"];;

- : string list = ["a"; "b"; "hi"; "goldbar"]

# remove_duplicate [true; false; true; false; false];;

- : bool list = [true; false]

# remove_duplicate [(1, 2); (2, 3); (1, 3); (2, 3)];;

- : (int * int) list = [(1, 2); (2, 3); (1, 3)]

# remove_duplicate [];;

- : ’a list = []

Question 6. [10점] 리스트를집합으로생각하여교집합을구하는함수 intersection를작성하라.

(타입) ’a list -> ’a list -> ’a list

(설명) 리스트는 집합으로 해석할 수 있다. intersection xl yl은 리스트 xl, yl을 각 각 집합으로 간

주하고 그 교집합을 구하는 함수이다. 최종으로 반환하는 리스트에서 원소의 순서는 중요하지 않다. 예를

들면 intersection [1; 2; 4] [2; 3; 4]는 두 개의 집합에 공통적으로 들어가는 원소가 2, 4이므로

반환값으로 [2; 4]이나 [4; 2]를반환한다.

(가정) 입력 받은 리스트에는 중복되는 원소가 존재하지 않는다. 예를 들면 [1; 2; 3; 1]처럼 원소가

중복되는경우는입력값으로들어오지않는다고가정한다.

(실행예)

# intersection;;

- : ’a list -> ’a list -> ’a list = <fun>

# intersection [1; 3; 5; 6] [2; 3; 4; 7];;

- : int list = [3]

# intersection [true; false] [false];;

- : bool list = [false]

# intersection ["ACT"; "TGC"; "TCA"; "GAC"; "AAC"] ["AAC"; "CGT"; "TCA"; "GAA"];;

- : string list = ["TCA"; "AAC"]

# intersection [] [];;

- : ’a list = []

Question 7. [10점] 리스트로부터다항함수를만드는함수 poly를작성하라.

(타입) int list -> (int -> int)

5

(설명) poly l은 리스트 l의 원소를 다항함수의 계수로 파악하고 다항함수를 생성해 반환하는 함

수이다. 다항함수는 각 항의 계수를 원소로 가지는 리스트로 표현할 수 있다. 즉 다항함수 f(x) =

anxn + an−1xn−1 + ... + a1x + a0는 리스트 [an; an−1; ...; a1; a0]로 표현할 수 있다. 반대로

[an; an−1; ...; a1; a0]라는계수의리스트를알면다항함수 f(x) = anxn+an−1xn−1+...+a1x+a0를

생성할수있다. poly [an; an−1; ...; a1; a0]는 f(x) = anxn + an−1xn−1 + ... + a1x + a0에해당하

는함수를생성하여반환한다. 입력값이 []인경우 f(x) = 0에해당하는상수함수를반환한다.

(실행예)

# poly;;

- : int list -> int -> int = <fun>

# poly [3; 2; 1] 0;;

- : int = 1

# poly [3; 2; 1] 1;;

- : int = 6

# poly [3; 2; 1] 2;;

- : int = 17

# poly [-5; 3; 2; 1] 5;;

- : int = -539

# poly [] 1;;

- : int = 0

# poly [] 2;;

- : int = 0

Question 8. [10점] 리스트를 집합으로 생각하였을 때, 리스트를 입력 받아 멱집합을 반환하는 함수

powerset을작성하라.

(타입) ’a list -> ’a list list

(설명) 리스트는 집합으로 해석할 수 있다. powerset l은 l의 멱집합을 구하여 리스트의 리스트타

입((’a list) list)으로 멱집합을 반환한다. 부분 집합간 순서, 부분 집합내 원소의 순서는 중요하

지 않다. 예를 들면 powerset [1] 의 경우 반환 값이 [[]; [1]]와 [[1]; []]중 무엇이 되어도 좋

다. 하지만 반환되는 리스트 역시 집합이므로 중복되는 원소가 있어서는 안된다. powerset [1]의 경우

[[]; [1]; []]는잘못된반환값이다.

(가정) 입력 받은 리스트에는 중복되는 원소가 존재하지 않는다. 예를 들면 [1; 2; 3; 1]처럼 원소가

중복되는경우는입력값으로들어오지않는다고가정한다.

(실행예)

# powerset;;

- : ’a list -> ’a list list = <fun>

# powerset [1;2;3];;

- : int list list = [[1; 2; 3]; [1; 2]; [1; 3]; [1]; [2; 3]; [2]; [3]; []]

# powerset ["a";"b";"c";"d"];;

- : string list list =

[["a"; "b"; "c"; "d"]; ["a"; "b"; "c"]; ["a"; "b"; "d"]; ["a"; "b"];

["a"; "c"; "d"]; ["a"; "c"]; ["a"; "d"]; ["a"]; ["b"; "c"; "d"]; ["b"; "c"];

6

["b"; "d"]; ["b"]; ["c"; "d"]; ["c"]; ["d"]; []]

# powerset [];;

- : ’a list list = [[]]

Question 9. [10점] 생명공학에서 DNA분석은 중요한 문제이다. DNA는 A, T, C, G(아데닌, 티민,

시토신, 구아닌) 4가지 염기의 조합으로 이루어져있고, 4가지 염기의 조합에 따라 생명체의 유전형질이 결

정된다. 그렇기때문에 DNA 염기서열에 특정한 염기서열이 포함되어 있는지를 확인하는 작업은 DNA연

구에 필수적이다. subsequence xl yl은 DNA 염기서열 xl에 염기서열 yl이 포함되어 있는지 검사한다.

4가지염기를표현하기위하여타입 dna가다음과같이정의되었다.

type dna = A | T | C | G;;

(타입) dna list -> dna list -> bool

(설명)리스트 L1과 L2에대해서 L1 = l1 @ L2 @ l2를만족하는리스트 l1, l2가존재할때 L2는 L1에

포함된다고말한다. 예를들면 [1; 2; 3; 4; 5; 6]와 [3; 4; 5]에대해 [1; 2; 3; 4; 5; 6] = [1; 2]

@ [3; 4; 5] @ [6]이므로 [3; 4; 5]은 [1; 2; 3; 4; 5; 6]에포함된다. 또다른예로 [1; 2; 3; 4; 5; 6]와

[4; 5; 6]는 [1; 2; 3; 4; 5; 6] = [1; 2; 3] @ [4; 5; 6] @ []을만족하므로 [4; 5; 6]은 [1; 2;

3; 4; 5; 6]에 포함된다. 하지만 [4; 6]는 [1; 2; 3; 4; 5; 6] = l1 @ [4; 6] @ l2을 만족하는 l1,

l2가존재하지않으므로 [1; 2; 3; 4; 5; 6]에포함되지않는다.

subsequence xl yl은 염기서열 yl이 DNA 염기서열 xl에 포함되어 있는지 검사하여 포함되어 있으면

true, 포함되어있지않으면 false를반환하는함수이다.

(실행예)

# subsequence;;

- : dna list -> dna list -> bool = <fun>

# let seq = [A; C; T; G; C; T; G; T; G; C; G; C; T; G];;

val seq : dna list = [A; C; T; G; C; T; G; T; G; C; G; C; T; G]

# subsequence seq [T; C; G];;

- : bool = false

# subsequence seq [G; C; T];;

- : bool = true

# subsequence [G; C; T] [];;

- : bool = true

# subsequence [] [];;

- : bool = true

Question 10. [20점] 에라토스테네스의체를이용하여소수의리스트를계산하는함수 prime seq를

작성하라.(이 문제의 배점은 20점입니다)

(타입) int -> int list

(설명) prime seq n은에라토스테네스의체를이용하여입력받은정수 n이하의모든소수를리스트의

형태로 반환한다. 에라토스테네스의 체는 소수를 구하기 위한 방법으로 [2; 3; 4; ...; n] 처럼 2부터

n까지의 모든 자연수들의 리스트가 있을때, 가장 먼저 있는 원소로 나누어 떨어지는 원소를 지워 나가는

방식으로 소수를 찾아낸다. 예를 들면 [2; 3; 4; 5; 6; 7; 8; 9; 10]이라는 리스트를 살펴보면 가장

앞에 있는 원소인 2로 [3; 4; 5; 6; 7; 8; 9; 10]의 원소를 나누어, 나누어 떨어지는 4, 6, 8, 10을

삭제하고나누어떨어지지않는 3, 5, 7, 9는남긴다. 같은방법을남은리스트 [3; 5; 7; 9]에대해서

7

도 적용한다. 이러한 과정을 반복해 나가면 마지막에 리스트에 남는 숫자들은 모두 소수이다. 에라토스테

네스의체방법은 2부터시작하는리스트를대상으로한다.

(가정) n ≥ 2

(실행예)

# prime_seq;;

- : int -> int list = <fun>

# prime_seq 2;;

- : int list = [2]

# prime_seq 10;;

- : int list = [2; 3; 5; 7]

# prime_seq 100;;

- : int list =

[2; 3; 5; 7; 11; 13; 17; 19; 23; 29; 31; 37; 41; 43; 47; 53; 59; 61; 67; 71;

73; 79; 83; 89; 97]

제 5 절 도전 문제 (50점)

[알림]도전 문제에 대한 질문은 일체 받지 않습니다.

OCaml은 함수가 정의될 때 몸통연산식을 바로 계산하지 않고, 함수의 적용이 일어날 때 몸통연산식을

계산한다. 함수몸통연산식의계산이지연되는예로다음함수를생각해보자.

# let f () = 2 + 3;;

val f : unit -> int = <fun>

함수 f는 unit 타입의 값 ()을 인자로 받으면 2 + 3의 계산결과를 반환한다. (따라서 f의 인자는 계산

에 이용되지 않고 무시된다.) 위의 정의에서 몸통연산식 2 + 3은 바로 계산되어 5로 대체될 수도 있지

만, OCaml은 f가 ()에 적용이 될 때 비로소 2 + 3을 계산한다. 즉 함수 f는 정의 시점에서 몸통연산식

2 + 3을 계산하지 않고 그대로 지니고 있다가 함수적용 f ()이 계산될 때 몸통연산식 2 + 3을 계산하는

것이다.

위와같은 Ocaml의특징을이용하면 무한개의원소로이루어진리스트를표현할수있다. 무한개의원

소로이루어진리스트를표현하기위해서다음의타입 ’a inf list를이용한다.

type ’a inf list = Inf list of (unit -> (’a * ’a inf list));;

생성자 Inf list의인자는 unit -> (’a * ’a inf list) 타입의함수로서리스트의첫번째원소(’a 타

입)와 나머지 리스트(’a inf list 타입)로 이루어진 튜플을 반환한다. Inf list의 인자로 이용하는 함수

는호출되기전까지몸통연산식을계산하지않음에주목하자.

’a inf list 타입의이용을돕기위해골격파일은아래의세함수를제공한다.

let inf_hd x = match x with Inf_list y -> let (a,_) = y () in a;;

let inf_tl x = match x with Inf_list y -> let (_,b) = y () in b;;

let rec inf_nth l n = if n = 1 then inf_hd l else inf_nth (inf_tl l) (n - 1);;

8

inf hd는 ’a inf list -> ’a 타입을가지고, inf hd l은무한개의원소로이루어진리스트 l의첫번

째원소를반환한다.

inf tl은 ’a inf list -> ’a inf list 타입을 가지고, inf tl l은 무한개의 원소로 이루어진 리스

트 l의첫번째원소를제외한나머지리스트를반환한다.

inf nth는 ’a inf list -> int -> ’a 타입을 가지고, inf nth l n은 무한개의 원소로 이루어진 리

스트 l의 n번째원소를반환한다.

Question [50점] 에라토스테네스의 체를 이용하여 소수의 리스트를 반환하는 함수 inf prime seq를 작

성하라.

(타입) unit -> int inf list

(설명) inf prime seq ()는 에라토스테네스의 체를 이용하여 2부터 시작하는 모든 소수를 크기 순서

대로나열하는 int inf list타입의리스트를반환한다.

(힌트) OCaml이 제공하는 List 라이브러리는 ’a inf list타입에 적용이 불가능하다. 그러나 List라

이브러리에 포함되어 있는 함수들을 ’a inf list 타입을 위한 함수로 바꾸어 보면 문제를 해결하는

데에 힌트를 얻을 수 있다 된다. 특히 inf hd, inf tl, inf nth 함수의 작동 원리를 이해하는 것이

’a inf list 타입을사용하는데큰도움이된다.

(실행예)

# inf_prime_seq;;

- : unit -> int inf_list = <fun>

# let prime = inf_prime_seq ();;

val prime : int inf_list = inf_list <fun>

# inf_hd prime;;

- : int = 2

# inf_nth prime 10;;

- : int = 29

# inf_nth (inf_prime_seq ()) 1000;;

- : int = 7919

제 6 절 질문시 유의 사항

아래와같은질문은삼가해주기바랍니다.

• (코드의 내용을 보여주면서) "제 코드가 요구사항대로 동작하지 않는데 어느 부분이 잘못된

건가요?"

→ 자신이작성한코드를보여주면서틀린부분을찾아달라는질문에대하여대답해줄수없습니다.

• "제 코드의 함수 f는 타입이 int->int->int 인데요, 핸드아웃에는 int->(int->int) 라고

되어 있어요, 괜찮은가요?"

→ 핸드아웃의 2절타입확인부분을읽고지시대로따라하면됩니다.

• "핸드아웃의 실행 예는 다 만족하는데요 그러면 제 코드가 올바르게 작성된 것인가요?"

→ 어떤 입력 값을 넣었을때 자기가 짠 코드가 올바른지 판단하는 몫은 학생여러분 자신들에게 있습

9

니다. 단, 강의게시판에자신이테스트한케이스를올려두고다른학생들의것과비교해보는것은상

관없습니다.

• "제가 짠 코드를 복사해서 Ocaml 해석기에 붙여넣어서 테스트하면 잘 되는데 컴파일 하면

에러가 나요 ㅠㅠ."

→ 편집기에서 복사해서 Ocaml 해석기에 붙여넣지 말고, Ocaml 해석기의 [File] → [Open] 을 이용

하거나컴파일러를이용합니다.

제 7 절 숙제에 대한 의견

숙제에대한학생들의모든의견을환영합니다. 숙제에대한의견이있으면

http://pl.postech.ac.kr/~gla/feedback/

페이지를방문하여의견을익명으로남겨주시길바랍니다. 여러분들의의견은향후숙제설계와강의준비

에중요한자료로이용됩니다. 의견을남기는사람에대한어떤정보도저장되지않습니다.

10