게시판 인덱스

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

2-4) 모듈 타입과 모듈의 사용법에 대해 질문이 있습니다.

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



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

올리기올려짐: 2018년9월18일 1:57    주제: 2-4) 모듈 타입과 모듈의 사용법에 대해 질문이 있습니다. 인용과 함께 답변

안녕하세요, 조교님.
과제 2-4 를 풀기 위해 연습 코드를 작성하던 중 의문이 생겨 질문 드리게 되었습니다.

아래와 같은 코드를 작성해서 인터프리터로 실행하였습니다.
두 모듈은 삽입만 가능한 정수 큐이고요,
둘의 내부 코드는 완전히 같지만 모듈A와 달리 모듈B는 모듈 타입을 구현했습니다.

코드:

module type MyModuleType =
    sig
        type elt
        type que
        val emptyQ: que
        val enQ: (que * elt) -> que
    end

module MyModuleA =
    struct
        type elt = int
        type que = elt list
        let emptyQ: que = []
        let enQ: (que * elt) -> que = fun (q, e) -> e::q
    end

module MyModuleB: MyModuleType =
    struct
        type elt = int
        type que = elt list
        let emptyQ: que = []
        let enQ: (que * elt) -> que = fun (q, e) -> e::q
    end

let qA: MyModuleA.que = MyModuleA.emptyQ
let qB: MyModuleB.que = MyModuleB.emptyQ

let x: int = 1
let y: MyModuleA.elt = 2
(* let z: MyModuleB.elt = 3 *)



첫째로, 주석처리 된 마지막 줄과 같은 변수 선언이 불가능한 이유가 무엇인가요?
둘째로,
코드:

MyModuleA.enQ (qA, x);;
MyModuleA.enQ (qA, y);;

는 잘 작동하지만
코드:

MyModuleB.enQ (qB, y);;

는 에러인 이유가 무엇인가요?

두 질문이 비슷한 내용인 것 같지만 Ocaml 사용이 미숙해서 질문 드리게 되었습니다.
감사합니다.
위로
사용자 정보 보기 비밀 메시지 보내기
로파스
Site Admin


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

올리기올려짐: 2018년9월18일 20:35    주제: 인용과 함께 답변

두가지 에러 모두 module type에서 elt의 타입을 명시적으로 공개하지 않아서 생기는 에러입니다.

module type에서 type elt라고만 선언되어있는데, 이것은 이러한 모듈타입을 가지는 모듈에는 elt라는 타입이 존재는 하는데, 이것이 구체적으로 어떻게 되어있는지는 드러내지 않겠다는 뜻입니다.

따라서 module type 내의 elt를 아예 int로 선언하거나, 펑터를 활용해 다른 모듈을 입력으로 받아 elt의 타입을 정의하도록 해야합니다.

전자의 경우는 elt가 임의의 타입에 대해서 잘 동작해야한다는 개념과 맞지 않으므로 쓰이지 않은 것이고, 후자의 경우는 이 문제의 의도 및 이번학기 전체 과정의 목표가 펑터 사용법을 익히는 것이 아니기때문에 따로 설명드리지는 않았습니다.

따라서 이번 숙제에서는 말씀해주신 에러들을 피하기 위해 MyModuleB처럼 모듈타입을 명시하고 구현하는 대신, 구현하신 모듈이 모듈타입에 맞는지만 확인해보시면 됩니다.

-조교 드림.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2018) 시간대: GMT + 9 시간(한국)
페이지 11

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


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