게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

숙제1 채점 결과입니다

 
글 쓰기   답변 달기     게시판 인덱스 -> 4541.664A Program Analysis (Spring 2011)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
윤용호



가입: 2008년 9월 23일
올린 글: 257

올리기올려짐: 2011년3월28일 19:10    주제: 숙제1 채점 결과입니다 인용과 함께 답변

숙제1 채점 결과입니다.

http://ropas.snu.ac.kr/~ta/4541.664A/11/score/hw1/score_hw1.txt

결과 파일의 문자가 깨져보이면 인코딩을 UTF-8로 바꾸어주세요.


숙제 제출에 대해 몇 가지 당부 말씀 드리겠습니다.


1. 함수의 타입을 지켜주세요.

2번의 zipper 함수의 예를 들면, zipper 함수의 타입은
코드:
zipper : int list -> int list -> int list
아닌
코드:
zipper : int list * int list -> int list
입니다.

앞의 것은 int list를 받아 int list -> int list 함수를 만들고, 이 함수가 다시 int list 하나를 더 받아서 int list를 만드는 함수입니다.
뒤의 것은 int list * int list, 즉 int list와 int list의 순서쌍을 한꺼번에 받아서 int list 하나를 만드는 함수입니다.

정의할 때는 앞의 것은
코드:
let zipper a b = ...
뒤의 것은
코드:
let zipper (a,b) = ...
와 같이 표현하게 됩니다.

이번 숙제에서는 Ocaml에 익숙하지 않은 분들도 많아서
일일이 손으로 수정하여 채점해드렸습니다만,
다음 숙제부터는 타입이 지켜지지 않을 경우 0점 처리합니다.
(Ocaml은 타입을 강하게 지키는 언어입니다)


2. 모든 정의 뒤에 ;;를 붙이지 말아주세요.

;; 는 .ml 코드에서 쓰는 예약어가 아닌,
Ocaml의 대화형 실행기에 '입력을 마침'이라는 신호를 주는 예약어입니다.
제출하시는 .ml 파일에서는 ;;를 붙이실 필요 없습니다.
(붙여도 컴파일도 되고 실행도 됩니다만, 의미도 없고 보기에도 어색합니다.)
붙이신 분과 안 붙이신 분이 반반정도 되더군요.

예를 들어 실행기에서는
코드:

let a=1;;
let b=2;;
print_int (a+b);;

와 같이 쓰지만 .ml 코드 파일에서는
코드:

let a=1
let b=2
let _=print_int (a+b)

이런 식으로 표현합니다.


3. 제출하는 파일에서 테스트 코드는 빼주세요.

예를 들어 숙제 2번의 경우
코드:
let _ = zipper ([1;2;3], [4;5;6])
과 같은 디버깅용 테스트 코드를 맨 뒤에 넣어서 제출하시는 분들이 있었습니다.
채점기에서 문제를 일으킬 수 있으니 테스트 코드는 삭제하거나 (* *) 로 감싸 주석처리 해주시길 바랍니다.

덧붙여, 제출하시는 .ml 파일의 top level 정의에는 가능하면 문제에 주어진 타입, 모듈, 함수들의 정의만 있는 것이 좋습니다.
정의 하실 함수에 필요한 보조 함수들이 필요하다면 let 정의 안에 싸주는 것이 좋습니다.
예를 들어 zipper를 정의하는 데 보조 함수로 foo, boo가 필요하다면
코드:

let foo=...
let boo=...
let rec zipper (a,b) = ...

와 같은 스타일보다는
코드:

let rec zipper (a,b) =
    let foo = ... in
    let boo = ... in
    ...

와 같은 스타일이 채점하기에 좋습니다. 단, 이것은 필수 사항은 아닙니다. 문제에서 정의해야 할 함수가 여러 개 있는 경우 공유하는 보조 함수가 있을 수도 있으므로 편하신대로 하셔도 괜찮습니다.


4. 그 파일 자체로 컴파일 가능한 코드를 제출해주세요.

제출하신 파일 이름이 hw1_ex1.ml 파일이라면
코드:

>> ocaml hw1_ex1.ml

이렇게 콘솔에 입력했을 때 아무 에러도 나지 않는 파일이어야 합니다.

문제에 주어진
코드:

type nat = ZERO | SUCC of nat

와 같은 타입 정의를 주석처리 해서 제출해주신 분이 계십니다.
문제에 주어진 타입 정의는 코드 안에 포함되어 있어야 합니다.
(물론 이번에 채점할 때는 주석을 풀고 채점하였습니다)


5. 대소문자 구분을 명확히 해주세요.

4번 문제에서 ZERO와 SUCC를 Zero, Succ로 쓰신 분이 있었습니다.
이번에는 단순실수로 생각하여 고쳐서 채점해드렸으나, 앞으로는 대소문자 구분도 지켜주세요.
이것은 단순한 채점의 편의때문만은 아니고 Smile
당연히 문제에서 요구하는 사항을 지키는게 맞지요.
(다른 언어를 쓰는 다른 과목들도 마찬가지죠?)


6. 기타 팁

표준 라이브러리를 적극적으로 활용하세요. 대부분의 '여러 곳에 쓸만한 유용한 함수'들은 표준 라이브러리에 이미 효율적으로 정의되어 있습니다.
덧붙여, 몇몇 쓸만한 예외들도 이미 정의되어 있습니다.
예를 들어 Division_by_zero exception은 이미 정의되어 있으며 n/0을 시도할 경우 자동으로 발생하므로 굳이 새로 정의하실 필요는 없었습니다.
Invalid_argument of string 도 이미 정의되어 있으므로 대부분의 '잘못된 입력' 예외에 사용하실 수 있습니다.
단, KMINUS 과제와 같이 주어진 모듈 타입 안에 예외가 포함되어 있는 경우 그 안에서 발생하는 예외들은 새로 정의한 예외로 발생시켜야 합니다



숙제 채점에 사용한 테스트셋과 모범 답안은 아직 1,2번 숙제를 제출하지 않으신 분들이 있는 관계로 추후에 공개하도록 하겠습니다. 클레임도 그 때에 받도록 하겠습니다. 감사합니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4541.664A Program Analysis (Spring 2011) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay