게시판 인덱스

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

functor에 대한 간단한 설명

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2008)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
조강원



가입: 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에 대해 설명하신 내용을 속기해 두었다가, 조교님의 요청으로 게시판에 올립니다.

속기 내용이 다소 문맥과 맞지 않을 수 있으니 양해해 주세요 ㅠㅠㅠ

저는 프로그래밍의 원리 수업은 듣지 않지만, 모든 수강생분들 프로젝트 열심히 하시고 좋은 성과 있으시기를 바랍니다. Smile
위로
사용자 정보 보기 비밀 메시지 보내기
강지훈



가입: 2008년 9월 2일
올린 글: 291
위치: 302동 312-2호

올리기올려짐: 2008년12월11일 1:53    주제: 인용과 함께 답변

조강원 씀:
조교님께서 수요일 새벽(12월 11일)에 301동 315호에서


.. 새벽 ㅜㅜ
_________________
강지훈
프로그래밍의 원리 조교

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

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


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