기본자료형만으로이루어진인자를받아서함수를결과값으로반환하는고차함수 기본자료형과함수를인자와결과값에모두이용하는고차함수 다음절에서는여러가지예를통해서고차함수가어떤경우에유용한지를설명한다. 2 고차함수의 예??장에서대상체만바뀌고중간과정은동일한계산이반복될때함수를이용하면전체연산식을간 단



Similar documents
No Title

OCaml

HW5 Exercise 1 (60pts) M interpreter with a simple type system M. M. M.., M (simple type system). M, M. M., M.

667

Print

우리나라의 전통문화에는 무엇이 있는지 알아봅시다. 우리나라의 전통문화를 체험합시다. 우리나라의 전통문화를 소중히 여기는 마음을 가집시다. 5. 우리 옷 한복의 특징 자료 3 참고 남자와 여자가 입는 한복의 종류 가 달랐다는 것을 알려 준다. 85쪽 문제 8, 9 자료

상품 전단지

::: 해당사항이 없을 경우 무 표시하시기 바랍니다. 검토항목 검 토 여 부 ( 표시) 시 민 : 유 ( ) 무 시 민 참 여 고 려 사 항 이 해 당 사 자 : 유 ( ) 무 전 문 가 : 유 ( ) 무 옴 브 즈 만 : 유 ( ) 무 법 령 규 정 : 교통 환경 재

2

DBPIA-NURIMEDIA

화이련(華以戀) hwp

ÆòÈ�´©¸® 94È£ ³»Áö_ÃÖÁ¾

歯1##01.PDF

<5BC1F8C7E0C1DF2D31B1C75D2DBCF6C1A4BABB2E687770>

120229(00)(1~3).indd

01Report_210-4.hwp

<C3D1BCB15FC0CCC8C45FBFECB8AE5FB1B3C0B0C0C75FB9E6C7E D352D32315FC5E4292E687770>



교육 과 학기 술부 고 시 제 호 초 중등교육법 제23조 제2항에 의거하여 초 중등학교 교육과정을 다음과 같이 고시합니다. 2011년 8월 9일 교육과학기술부장관 1. 초 중등학교 교육과정 총론은 별책 1 과 같습니다. 2. 초등학교 교육과정은 별책

시험지 출제 양식

¸é¸ñ¼Ò½ÄÁö 63È£_³»Áö ÃÖÁ¾

177

제주어 교육자료(중등)-작업.hwp

<C3D6C1BE5FBBF5B1B9BEEEBBFDC8B0B0DCBFEFC8A C3D6C1BEBABB292E687770>

초등국어에서 관용표현 지도 방안 연구

6±Ç¸ñÂ÷

과 위 가 오는 경우에는 앞말 받침을 대표음으로 바꾼 [다가페]와 [흐귀 에]가 올바른 발음이 [안자서], [할튼], [업쓰므로], [절믐] 풀이 자음으로 끝나는 말인 앉- 과 핥-, 없-, 젊- 에 각각 모음으로 시작하는 형식형태소인 -아서, -은, -으므로, -음

민주장정-노동운동(분권).indd

untitled

<C0CEBCE2BABB2D33C2F7BCF6C1A420B1B9BFAAC3D1BCAD203130B1C72E687770>


E1-정답및풀이(1~24)ok

<C1B6BCB1B4EBBCBCBDC3B1E2342DC3D6C1BE2E687770>

< BDC3BAB8C1A4B1D4C6C75BC8A3BFDC D2E687770>

교사용지도서_쓰기.hwp

최우석.hwp

cls46-06(심우영).hwp

時 習 說 ) 5), 원호설( 元 昊 說 ) 6) 등이 있다. 7) 이 가운데 임제설에 동의하는바, 상세한 논의는 황패강의 논의로 미루나 그의 논의에 논거로서 빠져 있는 부분을 보강하여 임제설에 대한 변증( 辨 證 )을 덧붙이고자 한다. 우선, 다음의 인용문을 보도록

0429bodo.hwp

伐)이라고 하였는데, 라자(羅字)는 나자(那字)로 쓰기도 하고 야자(耶字)로 쓰기도 한다. 또 서벌(徐伐)이라고도 한다. 세속에서 경자(京字)를 새겨 서벌(徐伐)이라고 한다. 이 때문에 또 사라(斯羅)라고 하기도 하고, 또 사로(斯盧)라고 하기도 한다. 재위 기간은 6

PowerPoint 프레젠테이션


안동회보73호-4절-pdf

EECS101 전자계산입문여섯번째숙제 -리스트- (100 점 + 도전문제점수 50점 ) 오진오 제출마감 : 5월 1일 11:59pm 이번숙제에서는수업시간에배웠던리스트에대한기본개념을프로그래밍을통해익혀보고, 리스트를통해가능한문제해결방법에대해서알

< B5BFBEC6BDC3BEC6BBE E687770>

11민락초신문4호

<3130BAB9BDC428BCF6C1A4292E687770>


제1절 조선시대 이전의 교육

??

사진 24 _ 종루지 전경(서북에서) 사진 25 _ 종루지 남측기단(동에서) 사진 26 _ 종루지 북측기단(서에서) 사진 27 _ 종루지 1차 건물지 초석 적심석 사진 28 _ 종루지 중심 방형적심 유 사진 29 _ 종루지 동측 계단석 <경루지> 위 치 탑지의 남북중심

새만금세미나-1101-이양재.hwp

652

歯 조선일보.PDF

<33B1C7C3D6C1BEBABB28BCF6C1A42D E687770>

<C1DFB1DE2842C7FC292E687770>

???? 1

96부산연주문화\(김창욱\)

목 차 국회 1 월 중 제 개정 법령 대통령령 7 건 ( 제정 -, 개정 7, 폐지 -) 1. 댐건설 및 주변지역지원 등에 관한 법률 시행령 일부개정 1 2. 지방공무원 수당 등에 관한 규정 일부개정 1 3. 경력단절여성등의 경제활동 촉진법 시행령 일부개정 2 4. 대

종사연구자료-이야기방 hwp

정 답 과 해 설 1 (1) 존중하고 배려하는 언어생활 주요 지문 한 번 더 본문 10~12쪽 [예시 답] 상대에게 상처를 주고 한 사 람의 삶을 파괴할 수도 있으며, 사회 전체의 분위기를 해쳐 여러 가지 사회 문제를 발생시킬 수 있다. 04 5


<34B1C720C0CEB1C7C4A7C7D828C3D6C1BEC6EDC1FD D28BCF6C1A4292E687770>

160215

참고 금융분야 개인정보보호 가이드라인 1. 개인정보보호 관계 법령 개인정보 보호법 시행령 신용정보의 이용 및 보호에 관한 법률 시행령 금융실명거래 및 비밀보장에 관한 법률 시행령 전자금융거래법 시행령 은행법 시행령 보험업법 시행령 자동차손해배상 보장법 시행령 자본시장과

hwp

580 인물 강순( 康 純 1390(공양왕 2) 1468(예종 즉위년 ) 조선 초기의 명장.본관은 신천( 信 川 ).자는 태초( 太 初 ).시호는 장민( 莊 愍 ).보령현 지내리( 保 寧 縣 池 內 里,지금의 보령시 주포면 보령리)에서 출생하였다.아버지는 통훈대부 판무

<C1DFB0B3BBE7B9FD3128B9FDB7C92C20B0B3C1A4B9DDBFB5292E687770>

ad hwp

1+2월호-최종

근대문화재분과 제4차 회의록(공개)

인천광역시의회 의원 상해 등 보상금 지급에 관한 조례 일부개정조례안 의안 번호 179 제안연월일 : 제 안 자 :조례정비특별위원회위원장 제안이유 공무상재해인정기준 (총무처훈령 제153호)이 공무원연금법 시행규칙 (행정자치부령 제89호)으로 흡수 전면 개

3. 은하 1 우리 은하 위 : 나선형 옆 : 볼록한 원반형 태양은 은하핵으로부터 3만광년 떨어진 곳에 위치 2 은하의 분류 규칙적인 모양의 유무 타원은하, 나선은하와 타원은하 나선팔의 유무 타원은하와 나선 은하 막대 모양 구조의 유무 정상나선은하와 막대나선은하 4.

-주의- 본 교재는 최 상위권을 위한 고난이도 모의고사로 임산부 및 노약자의 건강에 해로울 수 있습니다.

교육실습 소감문

1

PL10

9+10¿ùÈ£-ÃÖÁ¾-pdf

¼þ·Ê¹®-5Àå¼öÁ¤

(SD)신작영화 (SD)신작영화 뽀로로극장판-슈퍼썰매대모험 ,000 (SD)신작영화 (SD)신작영화 콜럼버스서클 ,000 (SD)신작영화 (SD)신작영화 세인츠앤솔저-공수특전대 2013.

109

1) 음운 체계상의 특징 음운이란 언어를 구조적으로 분석할 때, 가장 작은 언어 단위이다. 즉 의미분화 를 가져오는 최소의 단위인데, 일반적으로 자음, 모음, 반모음 등의 분절음과 음장 (소리의 길이), 성조(소리의 높낮이) 등의 비분절음들이 있다. 금산방언에서는 중앙

歯 동아일보(2-1).PDF

단위: 환경정책 형산강살리기 수중정화활동 지원 10,000,000원*90%<절감> 형산강살리기 환경정화 및 감시활동 5,000,000원*90%<절감> 9,000 4, 민간행사보조 9,000 10,000 1,000 자연보호기념식 및 백일장(사생,서예)대회 10

untitled

며 오스본을 중심으로 한 작은 정부, 시장 개혁정책을 밀고 나갔다. 이에 대응 하여 노동당은 보수당과 극명히 반대되는 정강 정책을 내세웠다. 영국의 정치 상황은 새누리당과 더불어 민주당, 국민의당이 서로 경제 민주화 와 무차별적 복지공약을 앞세우며 표를 구걸하기 위한

<33352D2D31342DC0CCB0E6C0DA2E687770>

구로구민체육센터 여성전용 기구필라테스 강좌 신설 구로구시설관리공단은 신도림생활체육관에서 2014년도부터 시행하여 주민의 큰 호응을 얻고있는 기구필라 테스 강좌를 일자로 구로구민체육센터에 확대 시행하게 되었습니다. 구로구 관내 고객들의 니즈를 반영한 기

<B9E9B3E2C5CDBFEFB4F5B5EBBEEE20B0A1C1A4B8AE20B1E6C0BB20B0C8B4C2B4D92E687770>

<31342D31345F B3E220BBF3B9DDB1E220C7D1B1B920BFB5C8ADBBEABEF720B0E1BBEA2E687770>

DBPIA-NURIMEDIA

내지4월최종

< B3E2B5B520BFEEBFB5BAB8B0EDBCAD28C6EDC1FDBABBBCF6C1A431292E687770>

주지스님의 이 달의 법문 성철 큰스님 기념관 불사를 회향하면서 20여 년 전 성철 큰스님 사리탑을 건립하려고 중국 석굴답사 연구팀을 따라 중국 불교성지를 탐방하였습 니다. 대동의 운강석굴, 용문석굴, 공의석굴, 맥적산석 굴, 대족석굴, 티벳 라싸의 포탈라궁과 주변의 큰

유니티 변수-함수.key

15강 판소리계 소설 심청전 다음 글을 읽고 물음에 답하시오. [1106월 평가원] 1)심청이 수궁에 머물 적에 옥황상제의 명이니 거행이 오죽 하랴. 2) 사해 용왕이 다 각기 시녀를 보내어 아침저녁으로 문 안하고, 번갈아 당번을 서서 문안하고 호위하며, 금수능라 비

2 국어 영역(A 형). 다음 대화에서 석기 에게 해 줄 말로 적절한 것은? 세워 역도 꿈나무들을 체계적으로 키우는 일을 할 예정 입니다. 주석 : 석기야, 너 오늘따라 기분이 좋아 보인다. 무슨 좋은 일 있니? 석기 : 응, 드디어 내일 어머니께서 스마트폰 사라고 돈

Microsoft Word - 青野論文_李_.doc

282서비스업관리-마트

Transcription:

EECS-101 전자계산입문 고차함수 박성우 2008년5월 29일 지금까지정수나부동소수와같은기본적인자료형의조합을인자로받고결과값으로반환하는 함수에대해서배웠다. 이번강의에서는함수자체를다른함수의인자로이용하거나결과값으로 이용하는 방법을 배운다. 1 고차함수의 의미 계산은무엇을어떻게처리하여결과값을얻는지설명하는것으로이루어진다. 여기서 무엇 과 결 과값 은계산의대상체로서정수나부동소수와같은기본자료형의조합으로표현하며, 어떻게 는 계산의중간과정으로서함수를이용하여표현한다. 사실기본적으로제공되는 +와 *와같은연산 자도내부적으로는함수로정의되어있기때문에모든계산의중간과정이함수로표현된다는것은 틀린설명이아니다. 이렇게함수는계산에서대상체를어떻게변환하고생성하는지를표현하는특 별한지위를가지며,정수나부동소수와같은기본자료형은계산의대상체로만이용되는보조적인 지위를 가진다. 정수와부동소수와같이함수의인자나결과값으로이용할수있는자료형을일종객체 first-class object 라 고부른다. 여기서 일종 이란특별한지위를가진다는뜻에서의일종이아니라 (특별한처리를요 하는특급우편물과는대조되는)편지나엽서와같은일종우편물처럼일반적인처리를요한다는뜻 에서의일종이다.즉정수나부동소수는함수간에전달되는일종우편물에비유하는것이다. 그러면함수자체를일종객체로이용할수있을까? 즉함수의인자로서함수를전달받고함수의 결과값으로함수를반환할수있을까? 대부분의프로그래밍언어는함수를일종객체로허용하지않 지만 OCAML의경우는허용한다. 따라서함수도일종객체의위치를가지게되고이러한의미에서 OCAML에서정의하는모든함수는일종함수 first-class function 라고말한다. 함수를인자나결과값으로이용하는함수를고차함수 higher-orderfunction 이라고한다. (기본자료 형만을인자와결과값으로이용하는함수는일차함수 first-order function 이라고한다. 지금까지다룬모 든함수는일차함수이다.) 고차함수는다음과같은세종류로나눌수있다. 가장일반적인형태의 고차함수는 세번째이다. 함수를인자로받고기본자료형만을결과값에이용하는고차함수 1

기본자료형만으로이루어진인자를받아서함수를결과값으로반환하는고차함수 기본자료형과함수를인자와결과값에모두이용하는고차함수 다음절에서는여러가지예를통해서고차함수가어떤경우에유용한지를설명한다. 2 고차함수의 예??장에서대상체만바뀌고중간과정은동일한계산이반복될때함수를이용하면전체연산식을간 단하게표현할수있음을배웠다. 마찬가지로이용하는함수만바뀌고중간과정은동일한계산이 반복될때고차함수를이용하면전체연산식을간단하게표현할수있다. 예를통해서고차함수가 실제로 어떻게 이용되는지 살펴보자. 2.1 함수를인자로받는고차함수 함수 f를받아서 0에적용한결과를반환하는고차함수를생각해보자. 모든함수는일종객체이므 로정수나부동소수형인자를이용할때와같은방식으로 f를형식인자로이용하면된다. let app zero f = f 0 몸통연산식에서 f는정수연산식 0에적용되므로 int타입을인자로받는모든함수에 app zero를 적용할수있다. 예를들어주어진정수를 1증가시키거나감소시키는함수 inc와 dec를가정하 자. let inc = fun x -> x + 1;; let dec = fun x -> x - 1;; app zero를 inc과 dec에적용하면각각 inc 0과 dec 0을계산한다. # app zero inc;; - : int = 1 # app zero dec;; - : int = -1 조금더복잡한예로서함수 f를받아서 0에두번적용한결과를반환하는고차함수를정의해보 자. # let app twice zero f = f (f 0);; val app twice zero : (int -> int) -> int = <fun> app twice zero의 타입 (int -> int) -> int를 그대로 해석하면 int -> int 타입 의값을받아서 int타입의값을반환함을의미한다. 그런데 int -> int타입의값은사실 int -> int타입을가지는함수이다. 따라서 app twice zero의타입은 int -> int타입 의함수를받아서정수를반환함을나타낸다. app twice zero를 inc과 dec에적용하면각각 inc (inc 0)과 dec (dec 0)을 계산한다. 2

# app twice zero inc;; - : int = 2 # app twice zero dec;; - : int = -2 함수 f를받아서0에세번적용한결과를반환하는고차함수도유사하게정의할수있다. # let app thrice zero f = f (f (f 0));; val app thrice zero : (int -> int) -> int = <fun> # app thrice zero inc;; - : int = 3 # app thrice zero dec;; - : int = -3 위의 함수들을 일반화하면 함수 f를 받아서 0에 n번 적용한 결과를 반환하는 고차함수 app times zero를자기호출함수형태로정의할수있다. # let rec app times zero f n = if n = 0 then 0 else f (app times zero f (n - 1));; val app times zero : (int -> int) -> int -> int = <fun> 만약 n = 0이면 f는 0번적용되므로 (즉한번도적용되지않으므로)결과값은 0이된다. 그렇 지않으면 f를 0에 (n 1)번적용한결과에다시한번더 f를적용하여총 n번을적용하게된다. app times zero는다음과같이이용할수있다. # app times zero inc 10;; - : int = 10 # app times zero dec 10;; - : int = -10 2.2 함수를결과값으로반환하는고차함수 함수를결과값으로반환하기위해서는 fun키워드를이용하여만든연산식이함수를나타내는하 나의값이라는점을이해하면된다.예를들어 inc의정의를살펴보자. let inc = fun x -> x + 1 이정의를그대로해석하면연산식 fun x -> x + 1의계산결과가변수 inc에저장됨을알수 있다. 그런데 fun x -> x + 1은그자체가이미하나의값으로서주어진정수를 1증가시키는 함수를나타낸다. 따라서이정의는실질적으로주어진정수를 1증가시키는함수 inc를생성하는 것으로 해석되는 것이다. 3

fun키워드를이용하여함수를생성할때다른지역변수나인자를이용할수있다. 예를들면 다음함수는인자로정수 n이주어졌을때주어진정수를 n증가시키는새로운함수를반환한다. # let incr n n = fun x -> x + n;; val incr n : int -> int -> int = <fun> 따라서 incr n 10은주어진정수를 10증가시키는함수가되고 incr n (-10)은주어진정수를 10감소시키는함수가된다. # (incr n 10) 0;; - : int = 10 # (incr n (-10)) 0;; - : int = -10 함수 incr n은 정수를 받아서 int -> int 타입의 함수를 반환하므로 int -> (int -> int) 타입을가지게된다. 그런데위의실행예에서는타입이 int -> int -> int로출력되고있는 데 이는 int -> int -> int와 int -> (int -> int)는 완전히 동등한 타입임을 의미한 다.설명을돕기위해서 incr n과비슷한함수 incr n 을생각해보자. # let incr n n x = x + n;; val incr n : int -> int -> int = <fun> incr n 은정수 n과 x를인자로받아서 x + n을결과값으로반환하므로 int -> int -> int 타입을가진다. 중요한점은이두개의함수 incr n과 incr n 이완전히동등하다는점이다. 즉 다음과같이 incr n을 incr n 으로해석해도되고반대로 incr n 을 incr n으로해석해도된 다. (??장에서소개한키워드 fun을이용하지않는함수정의방식도같은원리를이용하고있다.) incr n은 incr n 과동등하므로 incr n 10 0의계산결과는10이다. incr n 은 incr n과동등하므로 incr n 10의계산결과는주어진정수를 10증가시키 는함수가된다. # incr n 10 0;; - : int = 10 # incr n 10;; - : int -> int = <fun> 이원리를이용하면함수를결과값으로반환하는고차함수를여러가지형태로작성할수있다. 예를들면정수 a와 b를인자로받아서함수 f(x) = ax + b를반환하는고차함수 linear는다음과 같이여러가지형태로작성할수있다. 4

let linear a b x = a * x + b;; let linear a b = fun x -> a * x + b;; let linear a = fun b x -> a * x + b;; let linear a = fun b -> fun x -> a * x + b;; let linear = fun a -> fun b -> fun x -> a * x + b;; let linear = fun a b x -> a * x + b;; 이원리를일반화하면다음두타입은완전히동등하다는결론을얻게된다. T 1 -> T 2 -> -> T n 1 -> T n T 1 -> (T 2 -> -> (T n 1 -> T n ) ) 2.3 함수를인자로받고결과값으로반환하는고차함수 세번째형태의고차함수는위에서살펴본고차함수형태들을일반화시킨경우이다. 예로서함수 f와 g를받아서새로운함수 h(x) = f(x) + g(x)를생성하는고차함수 combine은다음과같이작 성할수있다. let combine f g = let h x = f x + g x in h 만약임시로 h라는함수를생성하지않고바로최종결과값을반환하고자하면다음과같이작성하 면된다. let combine f g = fun x -> f x + g x 이정의는2.2절에서설명한원리를이용하여다음과같이간단하게만들수있다. let combine f g x = f x + g x 다음예는 combine을이용하여새로운함수를만든뒤 0에적용하는예이다. # let h = combine (fun x -> x + 1) (fun y -> y - 1) in h 0;; - : int = 0 여기서 함수 fun x -> x + 1과 fun y -> y - 1이 정수와 부동소수처럼 값으로 취급되고 있음을볼수있다. 다른예로서함수 f와 g를받아서합성 composition 함수 g f를반환하는고차함수 compose는 다음과같이작성할수있다. let comp f g = fun x -> g (f x) 이정의는다음과같이간단하게만들수있다. let comp f g x = g (f x) 5

3 타입변수와 다형함수 고차함수를작성하다보면함수의타입을정확하게결정할수없는상황이종종발생한다. 예를들 어 2.3절에서 정의한 combine을 생각해보자. let combine f g = fun x -> f x + g x 연산식 f x + g x로부터다음과같은두가지사실을추론할수있다. 함수적용 f x와 g x는실제인자 x를공유하므로함수 f와 g의형식인자타입은동일하다. 함수 f와 g는모두 int타입의값을반환한다. 따라서 combine은구체적으로결정할수없는타입 T에대해서 (T -> int) -> (T -> int) -> (T -> int) 타입을가진다고결론을내릴수있다. 여기서중요한점은타입 T는사실아무타입이나될수있 다는사실이다. 예를들어 T = int로해석하여 int -> int타입의함수들을인자로이용할수 있고 T = bool로해석하여 bool -> int타입의함수들을인자로이용할수있다. # combine (fun x -> x + 1) (fun y -> y - 1);; - : int -> int = <fun> # combine (fun x -> if x then 1 else 0) (fun y -> if y then 0 else 1);; - : bool -> int = <fun> OCAML에서는 T와같이구체적으로결정할수없는타입을타입변수 typevariable 라고부르며 a, b, c등의형태로표시한다. 예를들어 combine의타입을표시할때타입변수 a를이용할수 있다. # let combine f g = fun x -> f x + g x;; val combine : ( a -> int) -> ( a -> int) -> a -> int = <fun> 보통 a가포함된타입은 아무타입 a에대해서 라는선언이내포되어있다고생각하면된다. 따라서 combine의타입은다음과같이해석할수있다. 아무타입 a에대해서 a -> int타입의함수두개를받아서 a -> int타입의함수를 반환한다. 타입에타입변수가포함된함수는다형함수 polymorphicfunction 이라고부른다. 연산식의타입에는여러개의타입변수가이용될수있다. 예를들어다음함수 pair의타입에 는두개의타입변수 a와 b가이용되고있다. # let pair x y = (x, y);; val pair : a -> b -> a * b = <fun> 6

여기서인자 x와 y가서로다른타입변수를가지는이유는아무런관계가없는두인자는같은타입 을가질필요가없기때문이다. 예를들면 x가 int타입을가질때 y는똑같이 int타입을가져도 되지만 bool타입을가져도되는것이다. # pair 0 0;; - : int * int = (0, 0) # pair 0 true;; - : int * bool = (0, true) pair의타입은다음과같이해석할수있다. 아무타입 a와 b에대해서 a타입의인자와 b타입의인자를받아서 a * b타입의 튜플을 반환한다. 7