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

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

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

OCaml

PowerPoint 프레젠테이션

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 ±×to0.

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

Chapter 4. LISTS

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

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

chap 5: Trees

slide2

슬라이드 1

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

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

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

SIGPLwinterschool2012

chap x: G입력

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

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

OCW_C언어 기초

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

chap x: G입력

컴파일러

Microsoft PowerPoint - 08-chap06-Queue.ppt

설계란 무엇인가?

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

1 01 [ ] [ ] plus 002

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

슬라이드 1

Microsoft PowerPoint - 08-Queue.ppt

282서비스업관리-마트

Microsoft PowerPoint - chap04-연산자.pptx

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

17장 클래스와 메소드

03장.스택.key

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

03_queue

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

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

OCaml ífl—로그랟밓

o 스택 (stack) ~ 쌓아놓은더미 1. 스택의개요 - 2 -

C# Programming Guide - Types

슬라이드 1


EA0015: 컴파일러

Microsoft PowerPoint - Java7.pptx

Semantic Consistency in Information Exchange

PowerPoint Presentation

Contents v 학습목표 자료구조큐에대한개념을스택과비교하여이해한다. 큐의특징과연산방법에대해알아본다. 순차표현방법을이용한큐와연결표현방법을이용한큐를구현해본다. 큐의응용방법을알아본다. v 내용 큐 큐의구현 큐의응용 2/74

Chap 6: Graphs

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

chap01_time_complexity.key

Microsoft PowerPoint - semantics

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

05_tree

04장.큐


Chapter 4. LISTS

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

06장.리스트

untitled

11강-힙정렬.ppt

adfasdfasfdasfasfadf

Microsoft Word - FunctionCall

C++ Programming

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

chap x: G입력

BY-FDP-4-70.hwp

2002년 2학기 자료구조

Abstract View of System Components

슬라이드 1

Microsoft PowerPoint - Chap5 [호환 모드]

Microsoft PowerPoint - 07-chap05-Stack.ppt

Microsoft PowerPoint - 제4장-스택과큐.pptx

Frama-C/JESSIS 사용법 소개

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

chap8.PDF

Microsoft Word - PLC제어응용-2차시.doc

10주차.key

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Modern Javascript

PowerPoint Template

11장 포인터

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

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)

PowerPoint 프레젠테이션

ABC 10장

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

자연언어처리

1

PowerSHAPE 따라하기 Calculate 버튼을 클릭한다. Close 버튼을 눌러 미러 릴리프 페이지를 닫는다. D 화면을 보기 위하여 F 키를 누른다. - 모델이 다음과 같이 보이게 될 것이다. 열매 만들기 Shape Editor를 이용하여 열매를 만들어 보도록

ThisJava ..

untitled

chap 5: Trees

untitled

Microsoft PowerPoint - Chapter_04.pptx

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

Microsoft PowerPoint - 제5장-스택의응용.pptx

Transcription:

Homework 2 SNU 4190.310, 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}. 그리고 d 0 d n 은크기가 d 0 k 0 + + d n k n 인정수를표현한다. 이것을살짝확장해서 k친수 를다음과같이정의해보자. 표현은 d 0 d n 여기서 d i {1 k,, 0} {0,, k 1}. 그리고 d 0 d n 은크기가 d 0 k 0 + + d n k n 인정수를표현한다. 예를들어, 2친수의경우를생각하자. 베이스가 { 1, 0, 1} 이되겠다. 0이 0을, + 가 1을 -가 1을표현한다고하면, + 는 1을, +0+ 는 5를, +-는 1을, +-0-는 9인정수를표현한다. 1

OCaml로 2친수라는타입을다음과같이정의했다 : type crazy2 = NIL ZERO of crazy2 ONE of crazy2 MONE of crazy2 예를들어, 0+-은 ZERO(ONE(MONE NIL)) 로표현된다. 위와같이표현되는 2친수를받아서그것의값을계산하는함수 crazy2val을정의하세요. crazy2val: crazy2 -> int. Exercise 2 (10pts) 친수의합 두 2친수를받아서 2친수의합에해당하는 2친수를내어놓는함수 crazy2add를정의하세요. crazy2add: crazy2 * crazy2 -> crazy2 위의 crazy2add는다음의성질이만족되야한다 : 임의의 2친수 z 과 z 에대해서 crazy2val (crazy2add(z,z )) = crazy2val(z) + crazy2val(z ). Exercise 3 (10pts) CheckMetroMap 아래 metro 타입을생각하자 : type metro = STATION of name AREA of name * metro CONNECT of metro * metro and name = string 아래 checkmetro 함수를정의하라 : checkmetro: metro -> bool checkmetro는주어진 metro 가제대로생겼는지를확인해준다. metro가제대로생겼다 는것은 (iff) 메트로역이름 (id in STATION(id)) 들이항상자기이름의지역 (m in AREA(id, m)) 에서만나타나는경우를뜻한다. 예를들어, 제대로생긴 metro 들은 : 2

AREA("a", STATION "a") AREA("a", AREA("a", STATION "a")) AREA("a", AREA("b", CONNECT(STATION "a", STATION "b"))) AREA("a", CONNECT(STATION "a", AREA("b", STATION "a"))) 그렇지못한것들의예들은 : AREA("a", STATION "b") AREA("a", CONNECT(STATION "a", AREA("b", STATION "c"))) AREA("a", AREA("b", CONNECT(STATION "a", STATION "c"))) Exercise 4 (15pts) 짚-짚-나무 임의의나무를여러분바지의 지퍼 로구현할수있답니다. 나무구조타입은아래와같이정의됩니다 : type item = string type tree = LEAF of item NODE of tree list 아래의 zipper가나무의줄기를타고자유자재로찢어놓기도하고붙여놓기도합니다. type zipper = TOP HAND of tree list * zipper * tree list 현재나무줄기의어느지점에멈춰있는지퍼손잡이 HAND(l,z,r) 에서, l은왼편형제나무들 (elder siblings) 이고 r은오른편형제나무들 (younger siblings) 이다. 나뭇가지에서의현재위치 location는현재위치를뿌리로하는나무자체와지퍼 (zipper) 로표현되는주변나무들로구성된다. type location = LOC of tree * zipper 예를들어, a b + c d 가다음과같은나무구조로표현될것이다. 모든심볼은항상잎새에매달리게된다. NODE [ NODE [LEAF a; LEAF *; LEAF b]; 3

LEAF +; NODE [LEAF c; LEAF *; LEAF d] ] 두번째곱셈표에의위치는다음과같다 : LOC (LEAF *, HAND([LEAF c], HAND([LEAF +; NODE [LEAF a; LEAF *; LEAF b]], TOP, []), [LEAF d])) 자, 주어진위치에서이제자유자재로나무를탈수있습니다. 왼편으로옮겨가는것은다음과같지요 : let goleft loc = match loc with LOC(t, TOP) -> raise (NOMOVE "left of top") LOC(t, HAND(l::left, up, right)) -> LOC(l, HAND(left, up, t::right)) LOC(t, HAND([],up,right)) -> raise NOMOVE "left of first" 다음의나머지함수들을정의하세요 : goright: location -> location goup: location -> location godown: location -> location Exercise 5 (10pts) Galculator 다음의계산기 galculator: exp -> float 를만듭시다. type exp = X INT of int REAL of float ADD of exp * exp SUB of exp * exp MUL of exp * exp DIV of exp * exp 4

SIGMA of exp * exp * exp INTEGRAL of exp * exp * exp 예를들어우리가쓰는수식이 exp 타입으로는다음과같이표현된다 : 10 x=1 10.0 x=1.0 (x x 1) SIGMA(INT 1, INT 10, SUB(MUL(X, X), INT 1)) (x x 1)dx INTEGRAL(REAL 1.0, REAL 10.0, SUB(MUL(X, X), INT 1)) 적분식을계산할때의알갱이크기 (dx) 는 0.1 로정한다. Exercise 6 (10pts) Queue = 2 Stacks 큐는반드시하나의리스트일필요는없습니다. 두개의스택으로큐를효 율적으로규현할수있습니다. 큐에넣고빼는작업이거의한스텝에이루어 질수있습니다. ( 하나의리스트위를더듬는두개의포인터를다루었던 C 의 구현과장단점을비교해보세요.) 각각의큐연산들의타입들은 : emptyq: queue enq: queue * element -> queue deq: queue -> element * queue 큐를 [a 1 ; ; a m ; b 1 ; ; b n ] 라고합시다 (b n 이머리 ). 이큐를두개의리스트 L 과 R 로표현할수있습니다 : L = [a 1 ; ; a m ], R = [b n ; ; b 1 ]. 한원소 x 를삼키면새로운큐는다음이됩니다 : [x; a 1 ; ; a m ], [b n ; ; b 1 ]. 원소를하나빼고나면새로운큐는다음이됩니다 : [a 1 ; ; a m ], [b n 1 ; ; b 1 ]. 뺄때, 때때로 L 리스트를뒤집어서 R 로같다놔야하겠습니다. 빈큐는 ([], []) 이겠지요. 다음과같은 Queue 타입의모듈을작성합니다 : module type Queue = sig 5

type element type queue exception EMPTY Q val emptyq: queue val enq: queue * element -> queue val deq: queue -> element * queue end 다양한큐모듈이위의 Queue 타입을만족시킬수있습니다. 예를들어 : module IntListQ = struct type element = int list type queue =... exception EMPTY Q let emptyq =... let enq =... let deq =... end 는정수리스트를큐의원소로가지는경우겠지요. 위의모듈에서함수 enq와 deq를정의하기바랍니다. 이모듈에있는함수들을이용해서큐를만드는과정의예는 : let myq = IntListQ.emptyQ let yourq = IntListQ.enQ(myQ, [1]) let (x,restq) = IntListQ.deQ yourq let hisq = IntListQ.enQ(myQ, [2]) Exercise 7 (20pts) 계산실행 아래 ZEXPR 꼴을가지는모듈 Zexpr를정의해봅시다. signature ZEXPR = sig exception Error of string type id = string type expr = NUM of int PLUS of expr * expr MINUS of expr * expr 6

MULT of expr * expr DIVIDE of expr * expr MAX of expr list VAR of id LET of id * expr * expr type environment type value val emptyenv: environment val eval: env * expr -> value end ZEXPR.expr 타입의식을 E라고하면, ZEXPR.eval (ZEXPR.emptyEnv, E) 는식 E를실행시키게되는데, 성공적으로끝나면최종값을프린트하고끝나게됩니다. 이때, VAR "x" 는 x라고명명된값을뜻합니다. 이름을정의하고그유효범위를한정하는식은 LET("x", E 1, E 2 ) 입니다. 이경우 E 1 값을계산해서 x라고이름짓게되고, 그이름의유효범위는 E 2 로한정됩니다. 현재환경에서정의되지않은이름이식에서사용되면그식은의미가없습니다. 예를들어, LET("x", 1, PLUS (LET("x", 2, PLUS(VAR "x", VAR "x")), VAR "x") ) 의계산결과는 5입니다. LET("x", 1, PLUS (LET("y", 2, PLUS(VAR "x", VAR "y")), VAR "x") ) 의계산결과는 4입니다. LET("x", 1, PLUS (LET("y", 2, PLUS(VAR "y", VAR "x")), VAR "y") ) 는의미가없습니다. 바깥 PLUS식의환경에서 y가정의되어있지않기때문입니다. 7

MAX 식은정수식리스트에서가장큰정수를찾아내는정수식입니다. 즉, MAX [NUM 1, NUM 3, NUM 2] 의계산결과는 3 입니다. MAX 가빈리스트를받 은경우결과는 0 입니다. 8