PowerPoint 프레젠테이션

Similar documents
OCaml

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

Exercise (10pts) k-친수 일반적으로 k진수(k > 1)는 다음과 같이 표현한다. d0 dn 여기서 di {0,, k 1}. 그리고 d0 dn 은 크기가 d0 k dn k n 인 정수를 표현한다. 이것을 살짝 확장해서 k친수 를 다음과 같이 정의

Homework 2 SNU , Fall 2015 Kwangkeun Yi due: 9/30, 24:00 Exercise 1 (10pts) k- 친수 일반적으로 k 진수 (k > 1) 는다음과같이표현한다. d 0 d n 여기서 d i {0,, k 1}. 그리

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000

chap 5: Trees

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

untitled

Homework 1 SNU , Fall 2012 Kwangkeun Yi Due: 9/14, 24:00 Exercise 1 리스트합 큰순서대로 (descending order) 나열된정수리스트두개를받아서하나의 순서리스트로만드는함수 merge: int lis

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

Lab 3. 실습문제 (Single linked list)_해답.hwp

03장.스택.key

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

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000

금오공대 컴퓨터공학전공 강의자료

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

untitled

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Modern Javascript

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Line (A) å j a k= i k #define max(a, b) (((a) >= (b))? (a) : (b)) long MaxSubseqSum0(int A[], unsigned Left, unsigned Right) { int Center, i; long Max

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

11강-힙정렬.ppt

282서비스업관리-마트

chap01_time_complexity.key

OCaml ífl—로그랟밓

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

10주차.key

C++-¿Ïº®Çؼ³10Àå

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

슬라이드 1

텀블러514

Microsoft PowerPoint - additional01.ppt [호환 모드]

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Homework 3 SNU , 2011 가을이광근 Program Due: 10/10, 24:00 Essay Due: 10/12, 15:30 이번숙제의목적은 : 수업시간에살펴본, 상식적인명령형언어의정확한정의를이해하고그실행기를구현해보기. 상식적인수준에서디자인

UI피피티

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

PowerPoint 프레젠테이션

Chapter 4. LISTS

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

DocsPin_Korean.pages

PowerPoint Presentation

목차 제 1 장개요 제 2 장소프트웨어구조 제 3 장공통요소 I

Tcl의 문법

Let G = (V, E) be a connected, undirected graph with a real-valued weight function w defined on E. Let A be a set of E, possibly empty, that is includ

03_queue

PowerPoint Template

06장.리스트

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

5.스택(강의자료).key

PowerPoint Presentation

제4장 기본 의미구조 (Basic Semantics)

슬라이드 1

Chapter 4. LISTS

chap8.PDF

歯처리.PDF

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

ThisJava ..

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

1장. 리스트

컴파일러

13주-14주proc.PDF

Microsoft Word - FunctionCall

λx.x (λz.λx.x z) (λx.x)(λz.(λx.x)z) (λz.(λx.x) z) Call-by Name. Normal Order. (λz.z)

adfasdfasfdasfasfadf

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

SIGPLwinterschool2012

11장 포인터

chap x: G입력

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

MAX+plus II Getting Started - 무작정따라하기

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

PowerPoint 프레젠테이션

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Ext JS À¥¾ÖÇø®ÄÉÀ̼ǰ³¹ß-³¹Àå.PDF

Frama-C/JESSIS 사용법 소개

즉, 두정수의사칙연산을계산하는함수를자기호출하면사칙연산이여러번들어간연산식도계산할수있다. 이번에는변수에대해생각해보자. 다음과같은연산식을계산한다고하자. let a = 2 a + 1 먼저 let과 사이의정의를보고변수 a에정수 2가저장되어있다는것을기억해둔다. 그다음에 뒤에오는연

DIY 챗봇 - LangCon


chap 5: Trees

2002년 2학기 자료구조

강의10

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

chap x: G입력

슬라이드 1

Microsoft PowerPoint - Chap5 [호환 모드]

CPX-E-EC_BES_C_ _ k1

untitled

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

KakaoGame Integrated Guidelines _Open

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

untitled

Microsoft PowerPoint Predicates and Quantifiers.ppt

PRO1_04E [읽기 전용]

Transcription:

Programming Languages 모듈과펑터 2016 년봄학기 손시운 (ssw5176@kangwon.ac.kr) 담당교수 : 임현승교수님

모듈 (module) 관련있는정의 ( 변수또는함수 ) 를하나로묶은패키지 예약어 module과 struct end를사용하여정의 아래는모듈의예시 ( 우선순위큐, priority queue) # module PrioQueue = struct type priority = int type 'a queue = Empty Node of priority * 'a * 'a queue * 'a queue let empty = Empty let rec insert queue prio elt = match queue with Empty -> Node(prio, elt, Empty, Empty) ( 중략 ) else Node(rprio, relt, left, remove_top right) let extract = function Empty -> raise Queue_is_empty Node(prio, elt, _, _) as queue -> (prio, elt, remove_top queue) end;; 2016-05-11 2

기본사용법 (1/2) 이미우리는모듈을사용함 라이브러리를통해 List 및 Pervasives 모듈을사용 # String.length "Hello, world!" ;; - : int = 13 # String.length "Programming Languages";; - : int = 21 파일을통해모듈생성 amodule.ml 과같이프로그램을작성하면, Amodule 이라는모듈이자동생성 아래와같이컴파일하여라이브러리생성 [cs08293@cs1 test]$ cat amodule.ml let hello () = print_endline "Hello" [cs08293@cs1 test]$ ocamlc -c amodule.ml [cs08293@cs1 test]$ ocamlc -a amodule.cmo -o library [cs08293@cs1 test]$ ocaml OCaml version 4.01.0 # #load "library" ;; # Amodule.hello () ;; Hello - : unit = () 2016-05-11 3

기본사용법 (2/2) 자주사용하는모듈은키워드 open 을사용하여바로접근 # open String;; # length "Hello, world!" ;; - : int = 13 # length "Programming Languages" ;; - : int = 21 구분이모호한이름의내용을갖는모듈은 open 을사용하지않음 # open Printf let my_data = [ "a"; "beautiful"; "day" ] let () = List.iter (fun s -> printf "%s\n" s) my_data ;; a beautiful day val my_data : string list = ["a"; "beautiful"; "day"] 2016-05-11 4

시그너쳐 (Signatures) (1/2) 모듈은특별한지정이없다면외부에서모든것이접근가능 하지만필요한것만외부에제공할필요가있음 예를들어아래의모듈에서 message 값은다른모듈이접근할필요가없음 시그너쳐 let message = "Hello" let hello () = print_endline message 모듈의구현을가려줄수있는모듈인터페이스 모듈이.ml 파일에정의되는것처럼, 시그너쳐는.mli 파일에작성 이파일은타입이명시된값 (value) 등을저장 2016-05-11 5

시그너쳐 (Signatures) (2/2) 시그너쳐생성 amodule.ml 과 amodule.mli 파일을다음과같이생성 [cs08293@cs1 test]$ cat amodule.ml let message = "Hello" let hello () = print_endline message [cs08293@cs1 test]$ cat amodule.mli val hello : unit -> unit Top-level 에서접근확인 [cs08293@cs1 test]$ ocamlc -c amodule.mli [cs08293@cs1 test]$ ocamlc -c amodule.ml [cs08293@cs1 test]$ ocamlc -a amodule.cmo -o library [cs08293@cs1 test]$ ocaml OCaml version 4.01.0 # #load "library" ;; # Amodule.hello () ;; Hello - : unit = () # Amodule.message ;; Characters 0-15: Amodule.message ;; ^^^^^^^^^^^^^^^ Error: Unbound value Amodule.message 2016-05-11 6

펑터 (functor) (1/3) 다른모듈에의해매개화되는 (parametrized) 모듈 함수가인수 (arguments) 라는다른값 (value) 으로매개화되는것과유사 e.g. 길이가 n인배열에대해서만동작하는배열연산들의콜렉션을돌려주는펑터 길이가 n이아닌배열을넘긴다면컴파일에러가발생 펑터를사용하지않을경우, 훨씬더나쁜결과로런타임에러를야기할것 펑터사용법 (1/2) Set 모듈에는 Make 펑터를제공함 이펑터는 ( 최소한 ) 요소의타입과 compare 함수를제공하는모듈인자를요구 이어서 2016-05-11 7

펑터 (functor) (2/3) 펑터사용법 (2/2) 정수의집합 # module Int_set = Set.Make (struct type t = int let compare = compare end) ;; module Int_set : sig type elt = int type t val empty : t val is_empty : t -> bool val mem : elt -> t -> bool val add : elt -> t -> t val singleton : elt -> t ( 중략 ) val elements : t -> elt list val min_elt : t -> elt val max_elt : t -> elt val choose : t -> elt val split : elt -> t -> t * bool * t val find : elt -> t -> elt end # let s = Int_set.empty ;; val s : Int_set.t = <abstr> # let t = Int_set.add 1 s ;; val t : Int_set.t = <abstr> # let u = Int_set.add 2 s ;; val u : Int_set.t = <abstr> # let tu = Int_set.union t u ;; val tu : Int_set.t = <abstr> # Int_set.find 1 tu ;; - : Int_set.elt = 1 # Int_set.find 2 tu ;; - : Int_set.elt = 2 # Int_set.find 3 tu ;; Exception: Not_found. 2016-05-11 8

펑터 (functor) (3/3) 펑터를정의하는방법 하나의인자를가진펑터는다음과같이정의 module F (X : X_type) = struct... end X 는인자로넘겨질모듈 X_type 는이모듈의시그너쳐 펑터는프로그래머가정확한프로그램을작성하는것을돕기위한것 2016-05-11 9

간단한펑터만들기 (1/4) 정렬된집합을만드는모듈을반환하는펑터생성 (1/2) 모듈에는다음 2 개의함수를포함 원소 (element) 를추가하는함수 ( 추가할때주어진 compare 함수를사용하여정렬 ) 집합에원소의유무를판별하는함수 비교결과에대한타입정의 # type comparison = Less Equal Greater;; type comparison = Less Equal Greater 펑터의인자모듈에대한시그너쳐정의 # module type ORDERED_TYPE = sig type t val compare: t -> t -> comparison end;; module type ORDERED_TYPE = sig type t val compare : t -> t -> comparison end 2016-05-11 10

간단한펑터만들기 (2/4) 정렬된집합을만드는모듈을반환하는펑터생성 (2/2) 펑터정의 # module Set = functor (Elt: ORDERED_TYPE) -> struct type element = Elt.t let empty = [] let rec add x s = match s with [] -> [x] hd::tl -> match Elt.compare x hd with Equal -> s Less -> x :: s Greater -> hd :: add x tl let rec member x s = match s with [] -> false hd::tl -> match Elt.compare x hd with Equal -> true Less -> false Greater -> member x tl end;; 2016-05-11 11

간단한펑터만들기 (3/4) 앞의펑터를사용하여모듈생성 (1/2) 펑터에사용할인자모듈정의 # module OrderedString = struct type t = string let compare x y = if x = y then Equal else if x < y then Less else Greater end;; module OrderedString : sig type t = string val compare : 'a -> 'a -> comparison end 모듈생성 # module StringSet = Set(OrderedString);; module StringSet : sig type element = OrderedString.t val empty : 'a list val add : OrderedString.t -> OrderedString.t list -> OrderedString.t list val member : OrderedString.t -> OrderedString.t list -> bool end 2016-05-11 12

간단한펑터만들기 (4/4) 앞에서정의한펑터를사용하여모듈생성 (2/2) 모듈을사용하여집합생성 # StringSet.member "bar" (StringSet.add "foo" StringSet.empty);; - : bool = false 앞의펑터를통해, IntSet 을만들고다음을테스트해보세요. # IntSet.member 2 (IntSet.add 2 (IntSet.add 1 IntSet.empty));; - : bool = true 2016-05-11 13