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

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

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.

chap 5: Trees

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 이번숙제의목적은 : 수업시간에살펴본, 상식적인명령형언어의정확한정의를이해하고그실행기를구현해보기. 상식적인수준에서디자인

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

slide2

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

SIGPLwinterschool2012

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

03장.스택.key

chap x: G입력

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

Microsoft PowerPoint - chap04-연산자.pptx

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

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

03_queue

WS12. Security

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

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

슬라이드 1

Chapter 4. LISTS

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

chap x: G입력

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

1 01 [ ] [ ] plus 002

Chap 6: Graphs

282서비스업관리-마트

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

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

untitled

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

Semantic Consistency in Information Exchange

OCW_C언어 기초

1차내지

컴파일러

Microsoft PowerPoint - 08-chap06-Queue.ppt

Microsoft PowerPoint - semantics

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

chap01_time_complexity.key

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

슬라이드 1

슬라이드 1

Microsoft PowerPoint - 08-Queue.ppt

Chapter 4. LISTS

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

04장.큐

untitled

C# Programming Guide - Types

자연언어처리

슬라이드 1

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

Frama-C/JESSIS 사용법 소개

10주차.key

Microsoft PowerPoint - Chap5 [호환 모드]

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

Modern Javascript

EA0015: 컴파일러

06장.리스트

Microsoft PowerPoint - chap03-변수와데이터형.pptx

11강-힙정렬.ppt

Microsoft PowerPoint Predicates and Quantifiers.ppt

adfasdfasfdasfasfadf

PowerPoint 프레젠테이션


제 1 장 기본 개념

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

정의 이진탐색트리 이진탐색트리 (BST: binary search tree) 는각각의노드가 BST 특성을만족하는키 - 주소쌍을가지고있는이진트리 BST 특성 트리에있는각각의키에대해, 왼쪽서브트리에있는모든키는이것보다작고, 오른쪽서브트리에있는모든키는이것보다큼 < > 2

chap x: G입력

2002년 2학기 자료구조

ABC 10장

1

chap8.PDF

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

Abstract View of System Components

슬라이드 1

슬라이드 1

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

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

슬라이드 1


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

슬라이드 1

SRC PLUS 제어기 MANUAL

歯처리.PDF

PowerPoint Presentation

Microsoft PowerPoint - chap05-제어문.pptx

PowerPoint 프레젠테이션

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

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

Microsoft PowerPoint - Chapter_02.pptx

PowerPoint 프레젠테이션

설계란 무엇인가?

Tcl의 문법


Observational Determinism for Concurrent Program Security

%eb%8f%99%ec%9d%b8-[NO_09]%20%ec%9d%98%ea%b3%bc%eb%8c%80%ed%95%99%20%ec%86%8c%ec%8b%9d%ec%a7%80_F(%ec%b5%9c%ec%a2%85)-2.pdf

Transcription:

Homework SNU 4190.310, Fall 017 Kwangkeun Yi due: 9/8, 4:00 Exercise 1 (10pts) 참거짓 Propositional Logic 식들 (formula) 을다음과같이정의했습니다 : type formula = TRUE FALSE NOT of formula ANDALSO of formula * formula ORELSE of formula * formula IMPLY of formula * formula LESS of expr * expr and expr = NUM of int PLUS of expr * expr MINUS of expr * expr 주어진 formula 를받아서참값을만들어내는함수 eval eval : formula bool 를정의하세요. 1

Exercise (10pts) k-친수 일반적으로 k진수(k > 1)는 다음과 같이 표현한다. d0 dn 여기서 di {0,, k 1}. 그리고 d0 dn 은 크기가 d0 k 0 + + dn k n 인 정수를 표현한다. 이것을 살짝 확장해서 k친수 를 다음과 같이 정의해보자. 표현은 d0 dn 여기서 di {1 k,, 0} {0,, k 1}. 그리고 d0 dn 은 크기가 d0 k 0 + + dn k n 인 정수를 표현한다. 예를 들어, 친수의 경우를 생각하자. 베이스가 { 1, 0, 1}이 되겠다. 0이 0을, +가 1을 -가 1을 표현한다고 하면, + 는 1을, +0+는 5를, +-는 1을, +-0-는 9 인 정수를 표현한다. OCaml로 친수라는 타입을 다음과 같이 정의했다: type crazy = NIL ZERO of crazy ONE of crazy MONE of crazy 예를 들어, 0+-은 ZERO(ONE(MONE NIL))

로 표현된다. 위와 같이 표현되는 친수를 받아서 그것의 값을 계산하는 함수 crazyval을 정의하세요. crazyval: crazy -> int. Exercise 3 (10pts) 친수의 합 두 친수를 받아서 친수의 합에 해당하는 친수를 내어놓는 함수 crazyadd 를 정의하세요. crazyadd: crazy * crazy -> crazy 위의 crazyadd는 다음의 성질이 만족되야 한다: 임의의 친수 z 과 z 0 에 대해서 crazyval (crazyadd(z,z 0 )) = crazyval(z) + crazyval(z 0 ). Exercise 4 (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 ))들이 항상 자기 이름의 3

지역(m in AREA(id, m))에서만 나타나는 경우를 뜻한다. 예를들어, 제대로 생긴 metro 들은: 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 5 (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)이다. 4

나뭇가지에서의 현재 위치 location는 현재위치를 뿌리로하는 나무자체와 지퍼(zipper)로 표현되는 주변 나무들로 구성된다. type location = LOC of tree * zipper 예를들어, a b + c d 가 다음과 같은 나무구조로 표현될 것이다. 모든 심볼은 항상 잎새에 매달리게 된다. NODE [ NODE [LEAF a; LEAF *; LEAF b]; 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 6 (10pts) Queue = Stacks 5

큐는 반드시 하나의 리스트일 필요는 없습니다. 두개의 스택으로 큐를 효율 적으로 규현할 수 있습니다. 큐에 넣고 빼는 작업이 거의 한 스텝에 이루어질 수 있습니다. (하나의 리스트위를 더듬는 두 개의 포인터를 다루었던 C의 구현과 장 단점을 비교해 보세요.) 각각의 큐 연산들의 타입들은: emptyq: queue enq: queue * element -> queue deq: queue -> element * queue 큐를 [a1 ; ; am ; b1 ; ; bn ] 라고 합시다 (bn 이 머리). 이 큐를 두개의 리스트 L과 R로 표현할 수 있습니다: L = [a1 ; ; am ], R = [bn ; ; b1 ]. 한 원소 x를 삼키면 새로운 큐는 다음이 됩니다: [x; a1 ; ; am ], [bn ; ; b1 ]. 원소를 하나 빼고나면 새로운 큐는 다음이 됩니다: [a1 ; ; am ], [bn 1 ; ; b1 ]. 뺄 때, 때때로 L 리스트를 뒤집어서 R로 같다 놔야하겠습니다. 빈 큐는 ([], []) 이 겠지요. 다음과 같은 Queue 타입의 모듈을 작성합니다: module type Queue = sig type element type queue exception EMPTY Q val emptyq: queue 6

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, []) Exercise 7 (0pts) 계산실행 아래 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 7

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", E1, E )입니다. 이 경우 E1 값을 계산해서 x라고 이름짓게 되고, 그 이름의 유효범위는 E 로 한정됩니 다. 현재 환경에서 정의되지 않은 이름이 식에서 사용되면 그 식은 의미가 없습니다. 예를 들어, LET("x", 1, PLUS (LET("x",, PLUS(VAR "x", VAR "x")), VAR "x") ) 의 계산결과는 5입니다. LET("x", 1, PLUS (LET("y",, PLUS(VAR "x", VAR "y")), VAR "x") ) 의 계산결과는 4입니다. LET("x", 1, 8

PLUS (LET("y",, PLUS(VAR "y", VAR "x")), VAR "y") ) 는 의미가 없습니다. 바깥 PLUS식의 환경에서 y가 정의되어있지 않기 때문입 니다. MAX식은 정수식 리스트에서 가장 큰 정수를 찾아내는 정수식입니다. 즉, MAX [NUM 1, NUM 3, NUM ]의 계산결과는 3입니다. MAX가 빈 리스트를 받은 경우 결과는 0입니다. 9