Tail-recursive Function, High-order Function

Slides:



Advertisements
Similar presentations
칠교판 – 탱그램 전주교대 실과교육과 이미현. 칠교판 ( 탱그램 ) 이란 ? 지혜놀이판 또는 탱그램 큰 직각이등변삼각형 2 개 중간 직각이등변삼각형 1 개 작은 직각이등변삼각형 2 개 작은 정사각형 1 개 평행사변형 1 개 =>5 가지의 7 개로 구성됨.
Advertisements

Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Indent Style, Recursive Function 전자계산입문 2009/03/27.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
이진 나무 구조 강윤섭 2008년 5월 23일.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
10장 함수.
학습목표 변수 비주얼 베이직 자료형 변수 선언하기. 학습목표 변수 비주얼 베이직 자료형 변수 선언하기.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
고급 선택 제어문과 반복문 Chapter 9 C에서의 다중 선택 제어문 선 검사 반복 구조와 for 문
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
6장. printf와 scanf 함수에 대한 고찰
2007 1학기 11 프로젝트 기초 실습.
KIM HEESANG PL/SQL 2 KIM HEESANG
11장. 1차원 배열.
13. 연산자 오버로딩.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
Method & library.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
인터넷응용프로그래밍 JavaScript(Intro).
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
연산자 (Operator).
에어 조건문.
2장. 변수와 타입.
프로그래밍 기초와 실습 Chapter 11 Recursion.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
Biomedical Instrumentation
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
1. 2진 시스템.
Chapter 08. 함수.
Fucntion 요약.
12. 상속 : 고급.
Excel 일차 강사 : 박영민.
01 로그의 정의 ⑴ 일 때, 양수 에 대하여 을 만족시키는 실수 는 오직 하나 존재한다. 이때 를
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
2장 PHP 기초 PHP의 시작과 끝을 이해한다. 주석문에 대하여 이해한다. echo 문을 이용하여 화면에 출력하
7주차: Functions and Arrays
Homework #8 (실습 #7) [1/2] 다음을 수행하는 PHP 프로그램을 작성하여 프로그램과 결과물을 프린트하여 제출한다. sin(45º), cos(45º), tan(45º)를 출력하는 프로그램을 작성하시오. 피보나치 수를 구하는 함수 fib($n)을 작성하고,
TVM ver 최종보고서
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
9장. spss statistics 20의 데이터 변수계산
어서와 C언어는 처음이지 제21장.
수업 내용 수업 목표 강의 내용 강의 계획서 교과서 및 참고도서 평가 방법 수강생의 학습 방법 제안 강의자료 사이트
7 생성자 함수.
제 10 강 문자 입출력.
Presentation transcript:

Tail-recursive Function, High-order Function 전자계산입문 2009/04/03

Tail-recursive Function [문제1] factorial 을 계산하는 함수 fact 를 recursive function 으로 작성한다. [실행결과]

Tail-recursive Function [모범답안] let rec fact n = if n = 0 then 1 else n * fact (n - 1) ;;

Tail-recursive Function [실습] factorial 을 계산하는 함수 fact 를 tail-recursive function 으로 작성한다. [모범답안] let fact n = let rec fact' n accum = if n = 0 then accum else fact' (n - 1) (n * accum) in fact' n 1 ;;

Tail-recursive Function [문제2] exponentiation 을 계산하는 함수 pow 를 recursive function 으로 작성한다. (인자 a와 b를 받아 ab를 계산하는 함수 pow 작성) [실행결과] Pow 3 20(=320)과 같이 pow 함수를 적용하는 경우 Ocaml이 표현 할 수 있는 정수의 범위를 벗어나 overflow 가 발생한다.

Tail-recursive Function [모범답안] let rec pow a b = if b = 0 then 1 else a * pow a (b - 1) ;;

Tail-recursive Function [실습] exponentiation 을 계산하는 함수 pow 를 tail-recursive function 으로 작성한다. [모범답안] let pow a b = let rec pow' a b s = if b = 0 then s else pow' a (b-1) (s*a) in pow' a b 1 ;;

Tail-recursive Function [문제3] 2진수를 10진수로 바꾸는 함수bin2dec 을 recursive function 으로 작성한다. [실행결과]

Tail-recursive Function [모범답안] let rec bin2dec x = if x = 0 then 0 else if x = 1 then 1 else 2 * bin2dec (x/10) + x mod 10 ;;

Tail-recursive Function [실습] 2진수를 10진수로 바꾸는 함수bin2dec 을 tail-recursive function 으로 작성한다. [실행결과]

Tail-recursive Function [오답] 착각하기 쉬운 답 (하지만 반대로 계산 됨 -.-) let bin2dec n = let rec bin2dec' n accum = if n = 0 then accum else bin2dec' (n / 10) (accum * 2 + n mod 10) in bin2dec' n 0 ;;

Tail-recursive Function [모범답안] 또 하나의 변수를 이용해야 함 let bin2dec n = let rec bin2dec' n m accum = if n = 0 then accum else bin2dec' (n / 10) (m * 2) (accum + m * (n mod 10)) in bin2dec' n 1 0 ;;

High-order Function 정수 x 와 y 의 합 let sum x y = x + y;; 1. sum 은 무엇인가? - sum 은 함수이다. type은 int -> int -> int 2. sum 2 3 은 무엇인가? - integer 이며, 그 값은 5 이다 3. sum 2 는 무엇인가? 오류인가? # sum 2;; - : int -> int = <fun> - 오류가 아니다. sum 2는 함수이다.

High-order Function 정수 x 와 y 의 합 4. 테스트 # f 10;; - : int = 12 # f 15;; 즉, sum 2는 2를 더하는 함수라 할 수 있다.

High-order Function 함수의 argument를 전부 주지 않는 경우 let sum x y = x + y;; let add2 = sum 2;; add2 5;; 나머지 argument 를 받아 계산하는 함수가 됨 (아래와 완전히 동일한 의미) let add2 x = 2 + x;;

High-order Function [실습] string_adder s 는 어떤 문자열 앞에 s를 삽입하여 반환하는 함수 작성 [실행결과] # string_adder;; - : string -> string -> string = <fun> # let hello_adder = string_adder "Hello ";; val hello_adder : string -> string = <fun> # hello_adder "della";; - : string = "Hello della" # let bye_adder = string_adder "Bye ";; val bye_adder : string -> string = <fun> # bye_adder "della";; - : string = "Bye della"

High-order Function [모범답안]두 가지 방법 let string_adder s = fun x -> s ^ x;; let string_adder s = let h s x = s ^ x in h s ;;

High-order Function [실습] integral f a b 는 int -> int 타입을 가지는 함수 f 를 구간 [a,b]에서 구분구적한 값을 반환하는 함수 작성. 구분구적에 사용하는 수식 [실행결과] # integral;; - : (int -> int) -> int -> int -> int = <fun> # let f x = 3*x*x + x - 9;; val f : int -> int = <fun> # integral f 0 0;; - : int = 0 # integral f 0 10;; - : int = 810

High-order Function [모범답안] let integral f a b = let rec integral' f a b s = if a = b then s else integral' f (a+1) b (f a + s) in integral' f a b 0 ;;