OCaml

Similar documents
PowerPoint 프레젠테이션

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

03장.스택.key

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}. 그리

untitled

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

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

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

SIGPLwinterschool2012

Modern Javascript

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

chap01_time_complexity.key

OCaml ífl—로그랟밓

PowerPoint 프레젠테이션

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

商用

chap10.PDF

K&R2 Reference Manual 번역본

歯처리.PDF

Microsoft Word - FunctionCall

untitled

282서비스업관리-마트

쉽게 풀어쓴 C 프로그래밍

slide2

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

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

chap 5: Trees

chap x: G입력

Microsoft Word - ExecutionStack

Microsoft PowerPoint - semantics

중간고사

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 \

Chapter 4. LISTS

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

Javascript.pages

A4 용지총 4 페이지를넘기지말것. 반드시컴퓨터로출력해서제출. 10/28( 월 ) 수업시간에제출. No delay acceptable. Exercise 2 (40pts) SM5 K--( 교재 4.3) 프로그램들을가상기계 (abstract machine) 인 SM5에서실

11강-힙정렬.ppt

컴파일러

12-file.key

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

chap8.PDF

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

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

PowerPoint 프레젠테이션

C프로-3장c03逞풚

02 C h a p t e r Java

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

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

4.18.국가직 9급_전산직_컴퓨터일반_손경희_ver.1.hwp



歯9장.PDF

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

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

untitled

chap x: G입력


Chapter 4. LISTS

, ( ),, ( ), 3, int kor[5]; int eng[5]; int Microsoft Windows 4 (ANSI C2 ) int kor[5] 20 # define #define SIZE 20 int a[10]; char c[10]; float

07 자바의 다양한 클래스.key

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

KT AI MAKERS KIT 사용설명서 (Node JS 편).indd

01-OOPConcepts(2).PDF

13주-14주proc.PDF

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

10주차.key

Week5

Chapter 4. LISTS

untitled

PowerPoint 프레젠테이션

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

SRC PLUS 제어기 MANUAL

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

1

untitled

본 강의에 들어가기 전

Semantic Consistency in Information Exchange

C 언어 프로그래밊 과제 풀이

adfasdfasfdasfasfadf

untitled

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

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

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

비긴쿡-자바 00앞부속

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

강의10

PowerPoint 프레젠테이션

untitled

CPX-E-EC_BES_C_ _ k1

ABC 10장

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

Java

Tcl의 문법

유니티 변수-함수.key

C++ Programming

03_queue

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

lecture4(6.범용IO).hwp

Transcription:

OCaml 2009.. (khheo@ropas.snu.ac.kr) 1

ML 2

ML OCaml INRIA, France SML Bell lab. & Princeton, USA nml SNU/KAIST, KOREA 3

4

(let) (* ex1.ml *) let a = 10 let add x y = x + y (* ex2.ml *) let sumofsquare x y = let square x = x * x in square x + square y let sumofsquare x y = let sqx = x * x in let sqy = y * y in sqx + sqy 5

(if, match) (* ex3.ml *) let iseven n = if n mod 2 = 0 then true else false (* ex4.ml *) let iseven n = match n mod 2 with 0 -> true 1 -> false (* ex5.ml *) let is3mulitple n = match n mod 3 with 0 -> true _ -> false 6

let iseven n = if n mod 2 = 0 then true else false let rec fac n = if n = 0 then 1 else n * fac(n-1) : fun sigma (a, b, (fun x -> x + 1)) : function sigma (a, b, (function x -> x + 1)) 7

(int, string ), list, tuple, record 8

2 + 2.5 (X) (float_of_int 2) +. 2.5 (O) 9

) if, match (* C *) int lucky(){ int r; while (1){ r = rand() % 100; if (r == 50) return r; else printf( again\n ) } } (* OCaml *) let rec lucky () = let r = Random.int 100 in if r = 50 then r else (printf( again\n ); lucky ()) 10

int, float, string, char, unit list, tuple, record 11

[1;2;3] = 1::[2;3] = 1::2::[3] [ a ] = a ::[] let ilist1 = [1; 2; 3] let ilist2 = 4::ilist1 let ilist3 = ilist1@ilist2 let gethead l = match l with h::t -> h [] -> raise Error 12

let man = ( age, 24) let input = (10, 100, (fun x -> x*x)) let getfirst l = match l with (f, _, _) -> f 13

C let getname r = type subject = {name : string; credit : int} let subject = {name = PL ; credit = 3} match r with {name= n; credit = c} -> n 14

type value = int type tree = Leaf Node of value * tree * tree let t = Node (5, Leaf, Node (4, Leaf, Leaf)) let rec sum t = match t with Node (v, t1, t2) -> v + sum t1 + sum t2 Leaf -> 0 15

(Polymorphic type) type itree = Leaf of int Node of int * itree * itree type a tree = Leaf of a Node of a * a tree * a tree let a = Leaf 5 let b = Node ( b, Leaf l, Leaf r ) 16

17

ML h::t, (a, b, _), _ type exp = Num of int Add of exp * exp Minus of exp * exp Mult of exp * exp Div of exp * exp let rec eval exp = match exp with Num i ->... Add (e1, e2) ->... Minus (e1, e2) ->...... 18

(Polymorphic) let identity x = x let trans t = match t with (a, b) -> (b, a) let gethead l = match l with h::t -> h [] -> raise Error 19

let add x y = x + y let incr = add 1 let seven = incr 6 let incrn n = (fun x -> x + n) let rec map f l = match l with h::t -> (f h)::(map f t) [] -> [] let incrlist = map (fun x -> x + 1) [1; 2; 3; 4] 20

, exception Error of string let rec fac n = if n < 0 then raise (Error invalid arg ) else if n = 0 then 0 else n + fac (n - 1) let f n = let a = try fac n with Error s -> print_endline s; -1 _ -> print_endline unknown exception ; -1 in print_int a; 21

let count = ref 0 let acc n = count :=!count + 1 22

,,, : :, module type StackSig = sig! type 'a stack! exception StackEmpty! val emptystack : 'a stack! val push : 'a stack * 'a -> 'a stack! val pop : 'a stack -> 'a * 'a stack end module Stack : StackSig = struct! type 'a stack = 'a list! exception StackEmpty! let emptystack = []! let push (stk, itm) = itm::stk! let pop stk =!! match stk with!! (itm::stack) -> (itm, stack)!! [] -> raise StackEmpty end 23

(functor) (* set.ml *) module type OrderedType = sig type t val compare : t -> t-> int end module type Make (Ord : OrderedType) struct type elt = Ord.t type t = Empty Node of t * elt * t * int... end module OrderedString struct type t = string let compare = compare end module StringSet = Set.Make (OrderedString) module IntSet = Set.Make(module struct type t = int let compare = compare end) 24

http://caml.inria.fr/pub/docs/manual-ocaml/ libref/ Ocaml List 25

let x = [1;2;3] List.length x (* 3 *) List.hd x (* 1 *) List.tl x (* [2;3] *) List.rev x (* [3;2;1] *) 26

let x = [1;2;3] let iseven = fun y -> (y mod 2) = 0 List.for_all iseven x (* false *) List.exist iseven x (* true *) List.mem 2 x (* true *) List.filter (fun x -> x < 2) x (* [1] *) 27

let x = [1;2;3] List.iter print_int x (* unit *) List.map string_of_int x (* [ 1 ; 2 ; 3 ] *) List.fold_left (fun x y -> x*10+y) 0 x (* 123 *) List.fold_right (fun x y -> y*10+x) x (* 321 *) 28

29

30

, 4:00 ~ 5:30 : khheo@ropas.snu.ac.kr : hjkim@ropas.snu.ac.kr 31

(ocaml) 32

/ ocamlc 10%, 10% 33

nml http://ropas.snu.ac.kr/~ta/4190.310/09/nmlguide.ppt OCaml http://www.ocaml-tutorial.org/ OCaml http://caml.inria.fr/pub/docs/manual-ocaml/libref/ 34