|
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
조강원
가입: 2008년 9월 2일 올린 글: 9
|
올려짐: 2008년12월11일 1:06 주제: functor에 대한 간단한 설명 |
|
|
프로그래밍의 원리 / 2008년 가을학기
긴급 실습수업[?] 속기록
functor에 대한 간단한 설명
2008년 12월 11일 00시 46분, 301동 315호
모듈이라는 것은 어떤 이름의 모음입니다. 다음과 같은 structure를 가정해 봅시다.
코드: | structure A = struct
type t = A of ...
val a = ...
end |
이렇게 큰 이름 안에 작은 이름들을 모아 놓은 것이 structure입니다.
대기열을 나타내는 어떤 자료가 있다고 가정해 봅시다. A가 줄을 관리하는 어떤 방법을 나타내고 있고, B가 줄을 관리하는 또 다른 방법을 나타내고 있습니다. 이 경우 A와 B에는 모두 empty, insert, extract 등이 들어가게 됩니다. 한편, 컴퓨터 C가 있다고 치고, 햄버거 가판대 H가 있다고 해 봅시다. 그럼 이들은 서비스를 제공하는 service라는 것을 가지고 있습니다.
그러면 대기열을 나타내는 방법과 실제 파는 것을 엮어서 가게를 만들 수 있습니다. 가게를 구성할 때 대기열을 Line이라고 하고, 파는 물건을 Item이라고 합시다. 그러면 이를 추상적으로 생각해 보면, 가게에서 실제 서비스를 할 때에는 줄에서 사람을 뽑아서 서비스를 제공하게 되므로 다음과 같이 됩니다.
코드: | coming = Line.insert
service = Item.service Line.extract |
이러한 것은 대기열이 어떠한 형태인지, 상품이 어떠한 것인지에 상관없이 항상 동일한 요소입니다. 따라서 재활용을 할 수 있으면 좋겠지요. 그래서 functor라는 것을 만들어서,
코드: | shop(Line:LINE, Item:ITEM) |
와 같이 함수처럼 만들어서, 어떤 structure를 반환하도록 해 봅시다. 그러면 다음과 같이 쓸 수 있습니다.
코드: | functor shop(Line:LINE, Item:ITEM) =
struct
coming = Line.insert
service = Item.service Line.extract
end |
모듈을 인자로 넘기는 것이 다소 생소할 텐데, nML에서는 다음과 같이 쓸 수 있었습니다.
코드: | Set = ...
SET = ...
SigSet = Set:SET |
즉, structure끼리 대입하는 것이 가능합니다. 이것은 functor에서 인자를 넘기는 과정에서도 똑같이 적용할 수 있습니다.
위와 같이 shop을 선언했다고 가정하고, 아까 보면 A와 B가 있고, C와 H가 있었잖아요. 그러면
코드: | alpha = shop(A, C)
beta = shop(B, H) |
와 같이 여러 개의 가게를 만들어 쓸 수 있게 됩니다.
한 가지 주의해야 할 점은, 교수님이 주신 코드에 문법적으로 잘못된 부분이 있습니다. functor의 괄호 안에는 structure라는 것이 들어갈 수 없습니다. 뼈대 코드를 수정해서
코드: | BasicFrame(
struct
box=Dragon
orient=NW
end
) |
와 같은 식으로 쓰는 것이 올바른 것입니다. 이 때 struct~end는 이름 없는 structure입니다.
종합하자면, functor는 함수와 비슷한데 단지 모듈이 날아다닌다는 것만 명심하시면 됩니다.
조강원 가 2008년12월11일 1:10에 수정함, 총 1 번 수정됨 |
|
위로 |
|
|
조강원
가입: 2008년 9월 2일 올린 글: 9
|
올려짐: 2008년12월11일 1:08 주제: |
|
|
조교님께서 수요일 새벽(12월 11일)에 301동 315호에서 functor에 대해 설명하신 내용을 속기해 두었다가, 조교님의 요청으로 게시판에 올립니다.
속기 내용이 다소 문맥과 맞지 않을 수 있으니 양해해 주세요 ㅠㅠㅠ
저는 프로그래밍의 원리 수업은 듣지 않지만, 모든 수강생분들 프로젝트 열심히 하시고 좋은 성과 있으시기를 바랍니다. |
|
위로 |
|
|
강지훈
가입: 2008년 9월 2일 올린 글: 291 위치: 302동 312-2호
|
올려짐: 2008년12월11일 1:53 주제: |
|
|
조강원 씀: | 조교님께서 수요일 새벽(12월 11일)에 301동 315호에서 |
.. 새벽 ㅜㅜ _________________ 강지훈
프로그래밍의 원리 조교
Jeehoon Kang
TA, Principles of Programming |
|
위로 |
|
|
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|