게시판 인덱스

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

함수의 타입에 관한 질문이 있습니다.

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2017)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
정민규



가입: 2017년 9월 11일
올린 글: 2

올리기올려짐: 2017년9월13일 22:20    주제: 함수의 타입에 관한 질문이 있습니다. 인용과 함께 답변

(1)
간단히 2개의 정수를 더하는 (int * int) -> int의 함수를 선언하는 방법이 2가지가 있습니다.
1. let func1 : (int*int) -> int = fun (x,y) -> x+y
2. let func2 ((x:int), (y:int)) : int =x+y

func1의 경우에는 명시적인 함수의 타입 선언과 우변의 항 또한 (int * int) -> int라서 별 문제가 안 될 것 같습니다만, func2의 경우에는 우변과 명시적인 선언이 int입니다.(처음에 func2의 함수 타입을 적는 위치에 (int*int) -> int를 넣었더니 expression이 예상한 타입과 다르다고 error가 출력됩니다.) 만약을 위해 질문하는 건데, 이런 식으로 작성하면 채점시 문제가 발생할 가능성이 있습니까?

(2)
1-3의 경우에는 iter의 첫번째 인자 pair 중 2번째인 function과 iter의 2번째 인자의 type이 안 적혀있던데, 각각 polymorphic type ('a->'a)와 'a로 구현해야하는 게 맞습니까?
위로
사용자 정보 보기 비밀 메시지 보내기
로파스
Site Admin


가입: 2012년 9월 9일
올린 글: 280

올리기올려짐: 2017년9월13일 22:43    주제: 인용과 함께 답변

(1)
혹시 문제가 발생하였다는 예시가
let func2 ((x:int), (y:int)) : ((int * int) -> int) =x+y

이렇게 타입을 명시해주신 경우인지요?

두번째 경우와 같이 타입을 명시하고자 하시는 경우 마지막 자리(현재 int * int -> int가 적힌 자리)에는 함수의 리턴타입이 명시되어야 합니다.

예를들자면 f라는 함수가 (a * b -> c)라는 타입이라면,

타입 명시할때는

let f ((x : a), (y : b)) : c = ...

이런 식으로 명시 및 구현하셔야 합니다.

타입 명시를 잘못한 경우에도 테스트 코드를 넣고 테스트해보면 컴파일 오류가 나게 됩니다.

즉 채점결과에 영향을 미칠 수 있습니다.

타입 명시를 하지 않더라도 숙제에서는 만점을 받을 수는 있습니다. 하지만 타입명시를 잘못해서 생기는 불이익은 테스트를 한번만 해보더라도 피해갈 수 있기 때문에, 이러한 이유로 타입 명시를 굳이 하지 않으실 필요 또한 없습니다.

(2)
맞습니다. 숙제 제출 및 보충스펙 공지에 비슷한 내용이 명시되어 있습니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2017) 시간대: GMT + 9 시간(한국)
페이지 11

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


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