SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
1.3장 차수 높은 프로시저 
(higher order procedure) 
로 요약하는 방법 
SICP 
아꿈사 - 우주미아홍구
1.3장 차수 높은 프로시저(higher order procedure)로 
요약하는 방법 
되풀이 되는 계산 방법을 간추리거나, 
프로시저를 인자로 받거나, 
프로시저를 결과 값으로 되돌려 주는, 
차수 높은 프로시저 : 데이터 처럼 사용하는 프로시저 
계산 방법을 요약 간추리는 프로시저 
(제네릭?,STL?,NS?)
1.3.1 프로시저를 인자로 받는 프로시저 
(define (만드려는프로시저명 인자 인자) 
프로시저 프로시저 인자 프로시저 인자)
1.3.1 프로시저를 인자로 받는 프로시저 
a~b 까지 정수의 합을 계산하는 프로시저 
(define (sum-integers a b)) 
(if (> a b) 
0 
(+ a (sum-integers (+ a 1) b))))
1.3.1 프로시저를 인자로 받는 프로시저 
시그마 ( 수열의 덧셈 ) 프로시저 
(define (<name> a b)) 
(if (> a b) 
0 
(+ (<term> a) 
(<name> (<next> a) b))))
1.3.1 프로시저를 인자로 받는 프로시저 
(define (identity x) x) 
(define (inc n) (+n 1)) 
(define (sum term a next b) 
(if (> a b) 
0 
(+ (term a) 
(sum term (next a) next b)))) 
(define (sum-intergers a b)) 
(sum identity a inc b))
1.3.1 프로시저를 인자로 받는 프로시저 
(define (identity x) x) 
(define (inc n) (+n 1)) 
(define (sum term a next b) 
(if (> a b) 
0 
(+ (term a) 
(sum term (next a) next b)))) 
(define (sum-intergers a b)) 
(sum identity a inc b))
1.3.1 프로시저를 인자로 받는 프로시저 
(define (identity x) x) 
(define (inc n) (+n 1)) 
(define (sum term a next b) 
(if (> a b) 
0 
(+ (term a) 
(sum term (next a) next b)))) 
(define (sum-intergers a b)) 
(sum identity a inc b))
1.3.1 프로시저를 인자로 받는 프로시저 
(define (identity x) x) 
(define (inc n) (+n 1)) 
(define (sum term a next b) 
(if (> a b) 
0 
(+ (term a) 
(sum term (next a) next b)))) 
(define (sum-intergers a b)) 
(sum identity a inc b))
1.3.2 lambda로 나타내는 프로시저 
임시 함수 
ex) (define (identity x) x) 
define 해서 하나하나 만들기 귀찮다! 
lambda를 쓰면 작은 프로시저는 따로 만들지 않아도!!
1.3.2 lambda로 나타내는 프로시저 
(define (plus4 x) (+ x 4)) 
(define plus4 (lambda (x) (+ x 4))) 
(lambda (<parameters>) <body>)
1.3.2 lambda로 나타내는 프로시저 
간단히 연습 lambda 
(define (square z) (z x z)) 
((lambda (x y z) (+ x y (square z))) 1 2 3) 
= ?
1.3.2 lambda로 나타내는 프로시저 
간단히 연습 lambda 
(define (square z) (z x z)) 
((lambda (x y z) (+ x y (square z))) 1 2 3) 
= ?
1.3.2 lambda로 나타내는 프로시저 
간단히 연습 lambda 
(define (square z) (x z z)) 
((lambda (x y z) (+ x y (square z))) 1 2 3) 
= (+ 1 2 (x 3 3)) 
= 12
1.3.2 lambda로 나타내는 프로시저 
let으로 갇힌 변수 만들기 
프로시저 안에서만 쓰는 변수(로컬변수) 
각각의 리스트가 값을 가지고 바디에 적용 
(let ((<var1> <exp1>) 
(<var2> <exp2>) 
… 
(<varn> <expn>)) 
<body>)
1.3.2 lambda로 나타내는 프로시저 
let으로 갇힌 변수 만들기 
각각의 리스트가 값을 가지고 바디에 적용 
let 외부에서 x는 2라면 
(let (x 3) 
(y (+ x 2)) 
(* x y)) 
let 안에서 첫번째 리스트 x는 3 
y는 외부의 x를 사용해서 2
1.3.2 lambda로 나타내는 프로시저 
let으로 갇힌 변수 만들기 
각각의 리스트가 값을 가지고 바디에 적용 
let 외부에서 x는 2라면 
(let (x 3) //x = 3 
(y (+ x 2)) //x = 2 (외부) 
(* x y)) 
let 안에서 첫번째 리스트 x는 3 
y는 외부의 x를 사용해서 2
1.3.2 lambda로 나타내는 프로시저 
let으로 갇힌 변수 만들기 
각각의 리스트가 값을 가지고 바디에 적용 
let 외부에서 x는 2라면 
(let (x 3) //x = 3 
(y (+ x 2)) //x = 2 (외부) 
(* x y)) 
let 안에서 첫번째 리스트 x는 3 
y는 외부의 x를 사용해서 2 
결국 body 에는 (* 3 4) => 12
1.3.3 일반적인 방법을 표현하는 프로시저 
수뿐 아니라 함수까지 인자로 받아 
계산하는 방법만 도려내어 프로시저로 간추림
1.3.3 일반적인 방법을 표현하는 프로시저 
이분법으로 방정식의 근 찾기 
f(a) < 0 < f(b) 
f(x) > 0 일때 f의 근은 a와 x 사이에 있음 
f(x) < 0 일때 f의 근은 b와 x 사이에 있음 
분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값
1.3.3 일반적인 방법을 표현하는 프로시저 
이분법으로 방정식의 근 찾기 
f(a) < 0 < f(b) 
f(x) > 0 일때 f의 근은 a와 x 사이에 있음 
f(x) < 0 일때 f의 근은 b와 x 사이에 있음 
분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 
(define (serarch f neg-point pos-point) 
(let ((midpoint (average neg-point pos-point))) //가운데 값 정의 
(if (close-enough? neg-point pos-point) //값이 근사치인가 
midpoint //맞으면 리턴 
(let ((test-value (f midpoint))) //아니면 중간값 사용 
(cond ((positive? test-value) //0보다 큰가 
(serarch f neg-point midpoint) //가까운값 
((negative? test-value) //0보다 작은가 
(serarch f midpoint pos-point)) //먼값 
(else midpoint)))))) //둘다 아니면 중간값
1.3.3 일반적인 방법을 표현하는 프로시저 
이분법으로 방정식의 근 찾기 
f(a) < 0 < f(b) 
f(x) > 0 일때 f의 근은 a와 x 사이에 있음 
f(x) < 0 일때 f의 근은 b와 x 사이에 있음 
분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 
(define (serarch f neg-point pos-point) 
(let ((midpoint (average neg-point pos-point))) //가운데 값 정의 
(if (close-enough? neg-point pos-point) //값이 근사치인가 
midpoint //맞으면 리턴 
(let ((test-value (f midpoint))) //아니면 중간값 사용 
(cond ((positive? test-value) //0보다 큰가 
(serarch f neg-point midpoint) //가까운값 
((negative? test-value) //0보다 작은가 
(serarch f midpoint pos-point)) //먼값 
(else midpoint)))))) //둘다 아니면 중간값
1.3.3 일반적인 방법을 표현하는 프로시저 
이분법으로 방정식의 근 찾기 
f(a) < 0 < f(b) 
f(x) > 0 일때 f의 근은 a와 x 사이에 있음 
f(x) < 0 일때 f의 근은 b와 x 사이에 있음 
분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 
(define (close-enough? x y) // 근접 한가 
(< (abs (- x y)) 0.001))
1.3.3 일반적인 방법을 표현하는 프로시저 
이분법으로 방정식의 근 찾기 
f(a) < 0 < f(b) 
f(x) > 0 일때 f의 근은 a와 x 사이에 있음 
f(x) < 0 일때 f의 근은 b와 x 사이에 있음 
분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 
(define (serarch f neg-point pos-point) 
(let ((midpoint (average neg-point pos-point))) //가운데 값 정의 
(if (close-enough? neg-point pos-point) //값이 근사치인가 
midpoint //맞으면 리턴 
(let ((test-value (f midpoint))) //아니면 중간값 사용 
(cond ((positive? test-value) //0보다 큰가 
(serarch f neg-point midpoint) //가까운값 
((negative? test-value) //0보다 작은가 
(serarch f midpoint pos-point)) //먼값 
(else midpoint)))))) //둘다 아니면 중간값
1.3.3 일반적인 방법을 표현하는 프로시저 
이분법으로 방정식의 근 찾기 
f(a) < 0 < f(b) 
f(x) > 0 일때 f의 근은 a와 x 사이에 있음 
f(x) < 0 일때 f의 근은 b와 x 사이에 있음 
분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 
(define (serarch f neg-point pos-point) 
(let ((midpoint (average neg-point pos-point))) //가운데 값 정의 
(if (close-enough? neg-point pos-point) //값이 근사치인가 
midpoint //맞으면 리턴 
(let ((test-value (f midpoint))) //아니면 중간값 사용 
(cond ((positive? test-value) //0보다 큰가 
(serarch f neg-point midpoint) //가까운값 
((negative? test-value) //0보다 작은가 
(serarch f midpoint pos-point)) //먼값 
(else midpoint)))))) //둘다 아니면 중간값
1.3.3 일반적인 방법을 표현하는 프로시저 
이분법으로 방정식의 근 찾기 
f(a) < 0 < f(b) 
f(x) > 0 일때 f의 근은 a와 x 사이에 있음 
f(x) < 0 일때 f의 근은 b와 x 사이에 있음 
분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 
(define (serarch f neg-point pos-point) 
(let ((midpoint (average neg-point pos-point))) //가운데 값 정의 
(if (close-enough? neg-point pos-point) //값이 근사치인가 
midpoint //맞으면 리턴 
(let ((test-value (f midpoint))) //아니면 중간값 사용 
(cond ((positive? test-value) //0보다 큰가 
(serarch f neg-point midpoint) //가까운값 
((negative? test-value) //0보다 작은가 
(serarch f midpoint pos-point)) //먼값 
(else midpoint)))))) //둘다 아니면 중간값
1.3.3 일반적인 방법을 표현하는 프로시저 
이분법으로 방정식의 근 찾기 
f(a) < 0 < f(b) 
f(x) > 0 일때 f의 근은 a와 x 사이에 있음 
f(x) < 0 일때 f의 근은 b와 x 사이에 있음 
분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 
(define (serarch f neg-point pos-point) 
(let ((midpoint (average neg-point pos-point))) //가운데 값 정의 
(if (close-enough? neg-point pos-point) //값이 근사치인가 
midpoint //맞으면 리턴 
(let ((test-value (f midpoint))) //아니면 중간값 사용 
(cond ((positive? test-value) //0보다 큰가 
(serarch f neg-point midpoint) //가까운값 
((negative? test-value) //0보다 작은가 
(serarch f midpoint pos-point)) //먼값 
(else midpoint)))))) //둘다 아니면 중간값
1.3.4 프로시저를 만드는 프로시저 
프로시저를 프로시저의 결과 값으로 돌려주는 
표현력의 상승 효과!! 
(define average-dump f) 
(lambda (x) (average x (f x)))) 
((average-dump square) 10)
1.3.4 프로시저를 만드는 프로시저 
프로시저를 프로시저의 결과 값으로 돌려주는 
표현력의 상승 효과!! 
(define average-dump f) 
(lambda (x) (average x (f x)))) 
((average-dump square) 10) 
(10 + 100) / 2 => 55
벌써 마무으리… 
프로그래머는 언제나 스스로 짠 프로그램을 놓고 
그 속에서 간추릴 게 무엇인지 찾아내어(리팩토링-냄새?), 
이로부터 더 수준 높은 표현 수단을 만들어 내려고 애써야 한다(추상화?)
벌써 마무으리… 
몇 가지 문제 풀이 방법을 간추려서 
다른 문제 풀이에도 다시 쓸수 있도록 
일반적인 표현 수단을 만들려고 
애쓰는 버릇은 정말 중요하다 
(재사용?,일반화?,제네릭?)
정리 
프로그래밍 언어의 일등급(first class) 
(프로시저가) 변수의 값(처럼 사용될 수)이 될 수 있다. 
다시 말해, 이름이 붙을 수 있다. 
(프로시저가) 프로시저의 인자로 쓸 수 있다. 
(프로시저가) 프로시저의 결과로 만들어질 수 있다. 
(프로시저가) 데이터 구조속에 집어 넣을수 있다.

Mais conteúdo relacionado

Mais procurados

초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)민태 김
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summaryHoChul Shin
 
2012 Ds D2 03
2012 Ds D2 032012 Ds D2 03
2012 Ds D2 03chl132435
 
2012 Ds D2 03 Pdf
2012 Ds D2 03 Pdf2012 Ds D2 03 Pdf
2012 Ds D2 03 Pdfkd19h
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개Terry Cho
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10Nam Hyeonuk
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)Juhee Kim
 
Haskell study 13
Haskell study 13Haskell study 13
Haskell study 13Nam Hyeonuk
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용유석 남
 
타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.KeySeokju Hong
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열Kim YoSep
 
How to Study Mathematics for ML
How to Study Mathematics for MLHow to Study Mathematics for ML
How to Study Mathematics for MLDataya Nolja
 

Mais procurados (20)

Regex
RegexRegex
Regex
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
2012 Ds D2 03
2012 Ds D2 032012 Ds D2 03
2012 Ds D2 03
 
2012 Ds D2 03 Pdf
2012 Ds D2 03 Pdf2012 Ds D2 03 Pdf
2012 Ds D2 03 Pdf
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
Haskell study 5
Haskell study 5Haskell study 5
Haskell study 5
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)
 
Haskell study 13
Haskell study 13Haskell study 13
Haskell study 13
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용
 
Haskell study 2
Haskell study 2Haskell study 2
Haskell study 2
 
타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열
 
Cp2 w5
Cp2 w5Cp2 w5
Cp2 w5
 
How to Study Mathematics for ML
How to Study Mathematics for MLHow to Study Mathematics for ML
How to Study Mathematics for ML
 
2012 Dm 07
2012 Dm 072012 Dm 07
2012 Dm 07
 

Destaque

자존감 탐구생활 - 박제영
자존감 탐구생활  - 박제영  자존감 탐구생활  - 박제영
자존감 탐구생활 - 박제영 Jinho Jung
 
I Hope There Fore I Am Seoung Eun Lee
I Hope There Fore I Am Seoung Eun LeeI Hope There Fore I Am Seoung Eun Lee
I Hope There Fore I Am Seoung Eun LeeKeynote User Group
 
[KUG PP 32nd] Be Good to Yourself (by TonyAdams6)
[KUG PP 32nd] Be Good to Yourself (by TonyAdams6)[KUG PP 32nd] Be Good to Yourself (by TonyAdams6)
[KUG PP 32nd] Be Good to Yourself (by TonyAdams6)Keynote User Group
 
[KUG Award 2009] iPhone, I Put My Dream Into My Hand Enhanced Version Sungjin...
[KUG Award 2009] iPhone, I Put My Dream Into My Hand Enhanced Version Sungjin...[KUG Award 2009] iPhone, I Put My Dream Into My Hand Enhanced Version Sungjin...
[KUG Award 2009] iPhone, I Put My Dream Into My Hand Enhanced Version Sungjin...Keynote User Group
 
[KUG PP 31st] Self Esteem (by 천재님)
[KUG PP 31st] Self Esteem (by 천재님)[KUG PP 31st] Self Esteem (by 천재님)
[KUG PP 31st] Self Esteem (by 천재님)Keynote User Group
 
창조경제(30분)
창조경제(30분)창조경제(30분)
창조경제(30분)Min Hwa Lee
 
[Ignite 강남 2016] 천성권 지속가능한 딸바보로 살기
[Ignite 강남 2016] 천성권 지속가능한 딸바보로 살기[Ignite 강남 2016] 천성권 지속가능한 딸바보로 살기
[Ignite 강남 2016] 천성권 지속가능한 딸바보로 살기Jinho Jung
 
창업자연대보증
창업자연대보증창업자연대보증
창업자연대보증Min Hwa Lee
 
디포커스 전홍구
디포커스 전홍구디포커스 전홍구
디포커스 전홍구Newsjelly
 
이민화의기업가정신
이민화의기업가정신이민화의기업가정신
이민화의기업가정신Min Hwa Lee
 
The Power of Visual Storytelling
The Power of Visual Storytelling The Power of Visual Storytelling
The Power of Visual Storytelling NewsCred
 
Storytelling 101
Storytelling 101Storytelling 101
Storytelling 101Ethos3
 
Visual Storytelling 101
Visual Storytelling 101Visual Storytelling 101
Visual Storytelling 101JESS3
 
40 Tools in 20 Minutes: Hacking your Marketing Career
40 Tools in 20 Minutes: Hacking your Marketing Career40 Tools in 20 Minutes: Hacking your Marketing Career
40 Tools in 20 Minutes: Hacking your Marketing CareerEric Leist
 

Destaque (15)

자존감 탐구생활 - 박제영
자존감 탐구생활  - 박제영  자존감 탐구생활  - 박제영
자존감 탐구생활 - 박제영
 
I Hope There Fore I Am Seoung Eun Lee
I Hope There Fore I Am Seoung Eun LeeI Hope There Fore I Am Seoung Eun Lee
I Hope There Fore I Am Seoung Eun Lee
 
[KUG PP 32nd] Be Good to Yourself (by TonyAdams6)
[KUG PP 32nd] Be Good to Yourself (by TonyAdams6)[KUG PP 32nd] Be Good to Yourself (by TonyAdams6)
[KUG PP 32nd] Be Good to Yourself (by TonyAdams6)
 
[KUG Award 2009] iPhone, I Put My Dream Into My Hand Enhanced Version Sungjin...
[KUG Award 2009] iPhone, I Put My Dream Into My Hand Enhanced Version Sungjin...[KUG Award 2009] iPhone, I Put My Dream Into My Hand Enhanced Version Sungjin...
[KUG Award 2009] iPhone, I Put My Dream Into My Hand Enhanced Version Sungjin...
 
[KUG PP 31st] Self Esteem (by 천재님)
[KUG PP 31st] Self Esteem (by 천재님)[KUG PP 31st] Self Esteem (by 천재님)
[KUG PP 31st] Self Esteem (by 천재님)
 
창조경제(30분)
창조경제(30분)창조경제(30분)
창조경제(30분)
 
Back to i keynote
Back to i keynoteBack to i keynote
Back to i keynote
 
[Ignite 강남 2016] 천성권 지속가능한 딸바보로 살기
[Ignite 강남 2016] 천성권 지속가능한 딸바보로 살기[Ignite 강남 2016] 천성권 지속가능한 딸바보로 살기
[Ignite 강남 2016] 천성권 지속가능한 딸바보로 살기
 
창업자연대보증
창업자연대보증창업자연대보증
창업자연대보증
 
디포커스 전홍구
디포커스 전홍구디포커스 전홍구
디포커스 전홍구
 
이민화의기업가정신
이민화의기업가정신이민화의기업가정신
이민화의기업가정신
 
The Power of Visual Storytelling
The Power of Visual Storytelling The Power of Visual Storytelling
The Power of Visual Storytelling
 
Storytelling 101
Storytelling 101Storytelling 101
Storytelling 101
 
Visual Storytelling 101
Visual Storytelling 101Visual Storytelling 101
Visual Storytelling 101
 
40 Tools in 20 Minutes: Hacking your Marketing Career
40 Tools in 20 Minutes: Hacking your Marketing Career40 Tools in 20 Minutes: Hacking your Marketing Career
40 Tools in 20 Minutes: Hacking your Marketing Career
 

Semelhante a 1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법

3 Generative models for discrete data
3 Generative models for discrete data3 Generative models for discrete data
3 Generative models for discrete dataJungkyu Lee
 
Code로 이해하는 RNN
Code로 이해하는 RNNCode로 이해하는 RNN
Code로 이해하는 RNNSANG WON PARK
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리suitzero
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdfjinwookhong
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfHo Jeong Im
 
Adversarial Attack in Neural Machine Translation
Adversarial Attack in Neural Machine TranslationAdversarial Attack in Neural Machine Translation
Adversarial Attack in Neural Machine TranslationHyunKyu Jeon
 
Wasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 IWasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 ISungbin Lim
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
2.supervised learning
2.supervised learning2.supervised learning
2.supervised learningHaesun Park
 
RUCK 2017 베이즈 모형의 꽃 - 계층 모형
RUCK 2017 베이즈 모형의 꽃 - 계층 모형RUCK 2017 베이즈 모형의 꽃 - 계층 모형
RUCK 2017 베이즈 모형의 꽃 - 계층 모형r-kor
 
환경계산법
환경계산법환경계산법
환경계산법Jaemin Seo
 

Semelhante a 1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법 (20)

3 Generative models for discrete data
3 Generative models for discrete data3 Generative models for discrete data
3 Generative models for discrete data
 
Tda jisu kim
Tda jisu kimTda jisu kim
Tda jisu kim
 
Code로 이해하는 RNN
Code로 이해하는 RNNCode로 이해하는 RNN
Code로 이해하는 RNN
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf
 
R 시작해보기
R 시작해보기R 시작해보기
R 시작해보기
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
Adversarial Attack in Neural Machine Translation
Adversarial Attack in Neural Machine TranslationAdversarial Attack in Neural Machine Translation
Adversarial Attack in Neural Machine Translation
 
Wasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 IWasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 I
 
Rdatamining
Rdatamining Rdatamining
Rdatamining
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
Equation Solving
Equation SolvingEquation Solving
Equation Solving
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
2.supervised learning
2.supervised learning2.supervised learning
2.supervised learning
 
RUCK 2017 베이즈 모형의 꽃 - 계층 모형
RUCK 2017 베이즈 모형의 꽃 - 계층 모형RUCK 2017 베이즈 모형의 꽃 - 계층 모형
RUCK 2017 베이즈 모형의 꽃 - 계층 모형
 
환경계산법
환경계산법환경계산법
환경계산법
 

Mais de 홍준 김

11장 윈도우 스레드 풀 + 12장 파이버
11장 윈도우 스레드 풀 + 12장 파이버11장 윈도우 스레드 풀 + 12장 파이버
11장 윈도우 스레드 풀 + 12장 파이버홍준 김
 
11장 윈도우 스레드 풀
11장 윈도우 스레드 풀11장 윈도우 스레드 풀
11장 윈도우 스레드 풀홍준 김
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장홍준 김
 
Mongo db문서의생성,갱신,삭제
Mongo db문서의생성,갱신,삭제Mongo db문서의생성,갱신,삭제
Mongo db문서의생성,갱신,삭제홍준 김
 
ManagingHumans/chap25~29
ManagingHumans/chap25~29ManagingHumans/chap25~29
ManagingHumans/chap25~29홍준 김
 
DebugIt/chapter9~11
DebugIt/chapter9~11DebugIt/chapter9~11
DebugIt/chapter9~11홍준 김
 
Holub on Patterns 1장 전
Holub on Patterns 1장 전Holub on Patterns 1장 전
Holub on Patterns 1장 전홍준 김
 
2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인홍준 김
 
프로그램은 왜 실패 하는가
프로그램은 왜 실패 하는가프로그램은 왜 실패 하는가
프로그램은 왜 실패 하는가홍준 김
 

Mais de 홍준 김 (15)

11장 윈도우 스레드 풀 + 12장 파이버
11장 윈도우 스레드 풀 + 12장 파이버11장 윈도우 스레드 풀 + 12장 파이버
11장 윈도우 스레드 풀 + 12장 파이버
 
11장 윈도우 스레드 풀
11장 윈도우 스레드 풀11장 윈도우 스레드 풀
11장 윈도우 스레드 풀
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장
 
Mongo db문서의생성,갱신,삭제
Mongo db문서의생성,갱신,삭제Mongo db문서의생성,갱신,삭제
Mongo db문서의생성,갱신,삭제
 
Taocp 2.3.5
Taocp 2.3.5Taocp 2.3.5
Taocp 2.3.5
 
Taocp 2.3
Taocp 2.3Taocp 2.3
Taocp 2.3
 
Taocp 2.1~2.2
Taocp 2.1~2.2Taocp 2.1~2.2
Taocp 2.1~2.2
 
Taocp
TaocpTaocp
Taocp
 
재테크
재테크재테크
재테크
 
ManagingHumans/chap25~29
ManagingHumans/chap25~29ManagingHumans/chap25~29
ManagingHumans/chap25~29
 
DebugIt/chapter9~11
DebugIt/chapter9~11DebugIt/chapter9~11
DebugIt/chapter9~11
 
Holub on Patterns 1장 전
Holub on Patterns 1장 전Holub on Patterns 1장 전
Holub on Patterns 1장 전
 
2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인2장 상태구도형 에이전트의 디자인
2장 상태구도형 에이전트의 디자인
 
5장
5장5장
5장
 
프로그램은 왜 실패 하는가
프로그램은 왜 실패 하는가프로그램은 왜 실패 하는가
프로그램은 왜 실패 하는가
 

Último

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 

Último (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 

1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법

  • 1. 1.3장 차수 높은 프로시저 (higher order procedure) 로 요약하는 방법 SICP 아꿈사 - 우주미아홍구
  • 2.
  • 3. 1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법 되풀이 되는 계산 방법을 간추리거나, 프로시저를 인자로 받거나, 프로시저를 결과 값으로 되돌려 주는, 차수 높은 프로시저 : 데이터 처럼 사용하는 프로시저 계산 방법을 요약 간추리는 프로시저 (제네릭?,STL?,NS?)
  • 4. 1.3.1 프로시저를 인자로 받는 프로시저 (define (만드려는프로시저명 인자 인자) 프로시저 프로시저 인자 프로시저 인자)
  • 5. 1.3.1 프로시저를 인자로 받는 프로시저 a~b 까지 정수의 합을 계산하는 프로시저 (define (sum-integers a b)) (if (> a b) 0 (+ a (sum-integers (+ a 1) b))))
  • 6. 1.3.1 프로시저를 인자로 받는 프로시저 시그마 ( 수열의 덧셈 ) 프로시저 (define (<name> a b)) (if (> a b) 0 (+ (<term> a) (<name> (<next> a) b))))
  • 7. 1.3.1 프로시저를 인자로 받는 프로시저 (define (identity x) x) (define (inc n) (+n 1)) (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) (define (sum-intergers a b)) (sum identity a inc b))
  • 8. 1.3.1 프로시저를 인자로 받는 프로시저 (define (identity x) x) (define (inc n) (+n 1)) (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) (define (sum-intergers a b)) (sum identity a inc b))
  • 9. 1.3.1 프로시저를 인자로 받는 프로시저 (define (identity x) x) (define (inc n) (+n 1)) (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) (define (sum-intergers a b)) (sum identity a inc b))
  • 10. 1.3.1 프로시저를 인자로 받는 프로시저 (define (identity x) x) (define (inc n) (+n 1)) (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) (define (sum-intergers a b)) (sum identity a inc b))
  • 11. 1.3.2 lambda로 나타내는 프로시저 임시 함수 ex) (define (identity x) x) define 해서 하나하나 만들기 귀찮다! lambda를 쓰면 작은 프로시저는 따로 만들지 않아도!!
  • 12. 1.3.2 lambda로 나타내는 프로시저 (define (plus4 x) (+ x 4)) (define plus4 (lambda (x) (+ x 4))) (lambda (<parameters>) <body>)
  • 13. 1.3.2 lambda로 나타내는 프로시저 간단히 연습 lambda (define (square z) (z x z)) ((lambda (x y z) (+ x y (square z))) 1 2 3) = ?
  • 14. 1.3.2 lambda로 나타내는 프로시저 간단히 연습 lambda (define (square z) (z x z)) ((lambda (x y z) (+ x y (square z))) 1 2 3) = ?
  • 15. 1.3.2 lambda로 나타내는 프로시저 간단히 연습 lambda (define (square z) (x z z)) ((lambda (x y z) (+ x y (square z))) 1 2 3) = (+ 1 2 (x 3 3)) = 12
  • 16. 1.3.2 lambda로 나타내는 프로시저 let으로 갇힌 변수 만들기 프로시저 안에서만 쓰는 변수(로컬변수) 각각의 리스트가 값을 가지고 바디에 적용 (let ((<var1> <exp1>) (<var2> <exp2>) … (<varn> <expn>)) <body>)
  • 17. 1.3.2 lambda로 나타내는 프로시저 let으로 갇힌 변수 만들기 각각의 리스트가 값을 가지고 바디에 적용 let 외부에서 x는 2라면 (let (x 3) (y (+ x 2)) (* x y)) let 안에서 첫번째 리스트 x는 3 y는 외부의 x를 사용해서 2
  • 18. 1.3.2 lambda로 나타내는 프로시저 let으로 갇힌 변수 만들기 각각의 리스트가 값을 가지고 바디에 적용 let 외부에서 x는 2라면 (let (x 3) //x = 3 (y (+ x 2)) //x = 2 (외부) (* x y)) let 안에서 첫번째 리스트 x는 3 y는 외부의 x를 사용해서 2
  • 19. 1.3.2 lambda로 나타내는 프로시저 let으로 갇힌 변수 만들기 각각의 리스트가 값을 가지고 바디에 적용 let 외부에서 x는 2라면 (let (x 3) //x = 3 (y (+ x 2)) //x = 2 (외부) (* x y)) let 안에서 첫번째 리스트 x는 3 y는 외부의 x를 사용해서 2 결국 body 에는 (* 3 4) => 12
  • 20. 1.3.3 일반적인 방법을 표현하는 프로시저 수뿐 아니라 함수까지 인자로 받아 계산하는 방법만 도려내어 프로시저로 간추림
  • 21. 1.3.3 일반적인 방법을 표현하는 프로시저 이분법으로 방정식의 근 찾기 f(a) < 0 < f(b) f(x) > 0 일때 f의 근은 a와 x 사이에 있음 f(x) < 0 일때 f의 근은 b와 x 사이에 있음 분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값
  • 22. 1.3.3 일반적인 방법을 표현하는 프로시저 이분법으로 방정식의 근 찾기 f(a) < 0 < f(b) f(x) > 0 일때 f의 근은 a와 x 사이에 있음 f(x) < 0 일때 f의 근은 b와 x 사이에 있음 분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 (define (serarch f neg-point pos-point) (let ((midpoint (average neg-point pos-point))) //가운데 값 정의 (if (close-enough? neg-point pos-point) //값이 근사치인가 midpoint //맞으면 리턴 (let ((test-value (f midpoint))) //아니면 중간값 사용 (cond ((positive? test-value) //0보다 큰가 (serarch f neg-point midpoint) //가까운값 ((negative? test-value) //0보다 작은가 (serarch f midpoint pos-point)) //먼값 (else midpoint)))))) //둘다 아니면 중간값
  • 23. 1.3.3 일반적인 방법을 표현하는 프로시저 이분법으로 방정식의 근 찾기 f(a) < 0 < f(b) f(x) > 0 일때 f의 근은 a와 x 사이에 있음 f(x) < 0 일때 f의 근은 b와 x 사이에 있음 분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 (define (serarch f neg-point pos-point) (let ((midpoint (average neg-point pos-point))) //가운데 값 정의 (if (close-enough? neg-point pos-point) //값이 근사치인가 midpoint //맞으면 리턴 (let ((test-value (f midpoint))) //아니면 중간값 사용 (cond ((positive? test-value) //0보다 큰가 (serarch f neg-point midpoint) //가까운값 ((negative? test-value) //0보다 작은가 (serarch f midpoint pos-point)) //먼값 (else midpoint)))))) //둘다 아니면 중간값
  • 24. 1.3.3 일반적인 방법을 표현하는 프로시저 이분법으로 방정식의 근 찾기 f(a) < 0 < f(b) f(x) > 0 일때 f의 근은 a와 x 사이에 있음 f(x) < 0 일때 f의 근은 b와 x 사이에 있음 분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 (define (close-enough? x y) // 근접 한가 (< (abs (- x y)) 0.001))
  • 25. 1.3.3 일반적인 방법을 표현하는 프로시저 이분법으로 방정식의 근 찾기 f(a) < 0 < f(b) f(x) > 0 일때 f의 근은 a와 x 사이에 있음 f(x) < 0 일때 f의 근은 b와 x 사이에 있음 분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 (define (serarch f neg-point pos-point) (let ((midpoint (average neg-point pos-point))) //가운데 값 정의 (if (close-enough? neg-point pos-point) //값이 근사치인가 midpoint //맞으면 리턴 (let ((test-value (f midpoint))) //아니면 중간값 사용 (cond ((positive? test-value) //0보다 큰가 (serarch f neg-point midpoint) //가까운값 ((negative? test-value) //0보다 작은가 (serarch f midpoint pos-point)) //먼값 (else midpoint)))))) //둘다 아니면 중간값
  • 26. 1.3.3 일반적인 방법을 표현하는 프로시저 이분법으로 방정식의 근 찾기 f(a) < 0 < f(b) f(x) > 0 일때 f의 근은 a와 x 사이에 있음 f(x) < 0 일때 f의 근은 b와 x 사이에 있음 분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 (define (serarch f neg-point pos-point) (let ((midpoint (average neg-point pos-point))) //가운데 값 정의 (if (close-enough? neg-point pos-point) //값이 근사치인가 midpoint //맞으면 리턴 (let ((test-value (f midpoint))) //아니면 중간값 사용 (cond ((positive? test-value) //0보다 큰가 (serarch f neg-point midpoint) //가까운값 ((negative? test-value) //0보다 작은가 (serarch f midpoint pos-point)) //먼값 (else midpoint)))))) //둘다 아니면 중간값
  • 27. 1.3.3 일반적인 방법을 표현하는 프로시저 이분법으로 방정식의 근 찾기 f(a) < 0 < f(b) f(x) > 0 일때 f의 근은 a와 x 사이에 있음 f(x) < 0 일때 f의 근은 b와 x 사이에 있음 분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 (define (serarch f neg-point pos-point) (let ((midpoint (average neg-point pos-point))) //가운데 값 정의 (if (close-enough? neg-point pos-point) //값이 근사치인가 midpoint //맞으면 리턴 (let ((test-value (f midpoint))) //아니면 중간값 사용 (cond ((positive? test-value) //0보다 큰가 (serarch f neg-point midpoint) //가까운값 ((negative? test-value) //0보다 작은가 (serarch f midpoint pos-point)) //먼값 (else midpoint)))))) //둘다 아니면 중간값
  • 28. 1.3.3 일반적인 방법을 표현하는 프로시저 이분법으로 방정식의 근 찾기 f(a) < 0 < f(b) f(x) > 0 일때 f의 근은 a와 x 사이에 있음 f(x) < 0 일때 f의 근은 b와 x 사이에 있음 분할 탐색 같은 느낌? 이진트리? 처럼 가서 근접점,값 (define (serarch f neg-point pos-point) (let ((midpoint (average neg-point pos-point))) //가운데 값 정의 (if (close-enough? neg-point pos-point) //값이 근사치인가 midpoint //맞으면 리턴 (let ((test-value (f midpoint))) //아니면 중간값 사용 (cond ((positive? test-value) //0보다 큰가 (serarch f neg-point midpoint) //가까운값 ((negative? test-value) //0보다 작은가 (serarch f midpoint pos-point)) //먼값 (else midpoint)))))) //둘다 아니면 중간값
  • 29. 1.3.4 프로시저를 만드는 프로시저 프로시저를 프로시저의 결과 값으로 돌려주는 표현력의 상승 효과!! (define average-dump f) (lambda (x) (average x (f x)))) ((average-dump square) 10)
  • 30. 1.3.4 프로시저를 만드는 프로시저 프로시저를 프로시저의 결과 값으로 돌려주는 표현력의 상승 효과!! (define average-dump f) (lambda (x) (average x (f x)))) ((average-dump square) 10) (10 + 100) / 2 => 55
  • 31. 벌써 마무으리… 프로그래머는 언제나 스스로 짠 프로그램을 놓고 그 속에서 간추릴 게 무엇인지 찾아내어(리팩토링-냄새?), 이로부터 더 수준 높은 표현 수단을 만들어 내려고 애써야 한다(추상화?)
  • 32. 벌써 마무으리… 몇 가지 문제 풀이 방법을 간추려서 다른 문제 풀이에도 다시 쓸수 있도록 일반적인 표현 수단을 만들려고 애쓰는 버릇은 정말 중요하다 (재사용?,일반화?,제네릭?)
  • 33. 정리 프로그래밍 언어의 일등급(first class) (프로시저가) 변수의 값(처럼 사용될 수)이 될 수 있다. 다시 말해, 이름이 붙을 수 있다. (프로시저가) 프로시저의 인자로 쓸 수 있다. (프로시저가) 프로시저의 결과로 만들어질 수 있다. (프로시저가) 데이터 구조속에 집어 넣을수 있다.