공순호
가입: 2005년 9월 29일 올린 글: 363 위치: 302동 312-2호
|
올려짐: 2009년4월20일 17:51 주제: 숙제 3의 OCaml 점수 |
|
|
* 숙제 3 점수
http://ropas.snu.ac.kr/~ta/4541.664A/09/score/hw3.score.txt
-----
테스트 케이스들을 돌려보고, 코드 길이가 길지 않아서 코드들을 일일이 읽으며 채점했습니다.
2명의 수강생에 대해서 CPO의 element에 대해서 order 를 이용하지 않고
OCaml의 '=' 연산자를 직접 이용하여 비교하는 코드가 있었습니다.
이는 옳지 않습니다. 그 이유는 function에 대해서 OCaml이 '=' 연산을 지원하지 않기 때문입니다.
예를 들어서 다음과 같이 type t가 함수인 CPO를 작성하고
코드: |
(* CPO Construction *)
module FunctionCPO : CPO =
struct
type t = sign -> sign
let order (f1, f2) =
let order_sign (s1, s2) = match (s1, s2) with
(BOT, _) -> true
| (ZERO, ZERO) -> true
| (PLUS, PLUS) -> true
| (MINUS, MINUS) -> true
| _ -> false
in
List.for_all (fun x -> order_sign (f1 x, f2 x)) domain
let lub (f1, f2) =
if order (f1, f2) then f2 else
if order (f2, f1) then f1 else
raise (Error "No LUB.")
let bottom = fun (x: sign) -> BOT
end
|
CPO -> CPO인 간단한 함수 id를 생각하면
order를 이용하지 않고 '=' 연산자를 이용한 fixpoint 구현은 다음과 같은 예외를 발생하며 fixpoint 계산에 실패하게 됩니다.
코드: |
Fatal error: exception Invalid_argument("equal: functional value")
|
이러한 이유로 3점 감점하였습니다. _________________ - soon@ropas |
|