바꾸기 mutation: 값이 아니라 물건으로 생각하기

Slides:



Advertisements
Similar presentations
폭력. 폭력이란 무엇인가 우상의 눈물 물리적인 폭력 ( 최기표 ) VS 지능적인 폭력 ( 임형우, 담임선생님 )
Advertisements

의료자원 규제현황과 개선방향 자원평가실. 의료자원 관리 개요 규제개혁 토론과제.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
1 박 2 일 !!! 인천마장초등학교 유수아. 1 박 2 일 멤버 인기순 위 1 위 이승기 2 위 엄태웅 3 위 은지원 4 위 김종민, 이수근 ※인터넷에서 본것이기 때문에 사람에따라 서 다를 수 있다. ※
연령별 재테크 방법.
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
석관중앙교회 5남전도회 석 관 중 앙 교 회 회원 소식 통권 05-04호 발행일 : 2005년 04월 회 장 : 장진호 집사
연 합 남 전 도 회 월 례 회 1부 예배- 찬 송 장 다같이 2011년 1월 2일 1부 예배- 찬 송 장 다같이 기 도
지역사회복지론 1조. 요양보호시설에 대해서 황성국 임재형 이동영
사 업 계 획 2011년 제1호 - 2월 1일 2011 주 안에서 소통하며 화합하고 참여하며 헌신하는 남신도회
행복한 부자교실 16기 8조 성동구 성수동 답사 결과 12월 22일 발표.
2017 법인관련 개정세법 곽장미 세무사.
3 장 stack and queue.
회 사 소 개 서 회 사 소 개 서 회 사 소 개 서 홈페이지 개발일정 및 견적서 광 진 사 광 진 사
Internet Computing KUT Youn-Hee Han
I 문학의 개념과 역할 1. 문학의 개념 (1) 언어 예술로서의 문학 (2) 소통 활동으로서의 문학
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
PART 01 총 론 제9장 한국 사회복지법제의 형성과 발전.
2004년 예비신자 오리엔테이션 2004년 3월 13일 (토) 오후 8시 천주교 수원교구 상촌성당 [티없이 깨끗하신 성모성심]
4. 목적론적 윤리와 의무론적 윤리 01. 경험주의와 이성주의 01. 경험주의와 이성주의 02. 결과론적 윤리와 공리주의
제 8 장  파서 생성기 YACC 사용하기.
Chapter 10 – 추상 자료형 Outline 10.1 소개 10.2 Ada의 추상 자료형 10.3 C++의 추상 자료형
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
Internet Computing KUT Youn-Hee Han
4장 스택.
7 스택.
스택(stack) SANGJI University Kwangman Ko
MySQL 기본 사용법.
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
[INA240] Data Structures and Practice
Chapter 06. 스택(Stack) Chapter 06-1: 스택의 이해와 ADT 정의.
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (
재귀 혹은 귀납 Recursive or Inductive Definition 집합을 정의하는 방법
효율적인 포인터 오류 검증 이욱세 한양대학교 컴퓨터공학과
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
제주닷컴 매뉴얼 (실시간 예약시스템) 2013년 10월.
시설채소 육묘기술 국립원예특작과학원 이 준구.
여는 장 큰제목과 조원이름은 늘 가로중앙선에 중심을 맞춰주세요.
프로그램 식 조합 방법 <expr> ::= <constant> | <name>
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
개항기 조선과 동아시아 박 범 한국역사입문Ⅱ.
Hypothesis Testing 가설 검정
2016년 연말정산 항목별 유의사항 등.
6장 데이터 타입(3) 순천향대학교 컴퓨터공학부 하 상 호.
1. 컴퓨터 시스템 구성요소 메모리(Memory) 캐시메모리 개념 캐시메모리의 특징 적중률(hit ratio)
Lecture 8 복잡한 구조 프로그래밍 프로그램 짤 때의 마음가짐 invariant 데이터 구성 list pair
대구의 부도심 대구의 주요축 동대구 부도심 4조 강민석 / 박성균 / 최은지/ 황재현/김예지.
작성일 참고서적 – Programing Game AI by Example
4차원의 영성 : 말 -류동희 교수-.
2010년 연말정산 교육자료 센터운영팀 인사파트
제안 목적 고객성향 분석으로 매출 증대 유사업체 분석으로 신상품 홍보 원가요소 분석 및 피드백으로 원가율 관리
청각기관의 구조와 기능2 옥정달.
3장. 탐색.
이산수학(Discrete Mathematics)
사도행전 13장 22절 말씀 –아멘 다 윗 을 왕 으 로 세 우 시 고 증 언 하 여 이 르 시 되 내 가 이 새 의 아 들
Scheme ML Review & Preview 재귀와 반복(recursion and iteration)
1. 관계 데이터 모델 (1) 관계 데이터 모델 정의 ① 논리적인 데이터 모델에서 데이터간의 관계를 기본키(primary key) 와 이를 참조하는 외래키(foreign key)로 표현하는 데이터 모델 ② 개체 집합에 대한 속성 관계를 표현하기 위해 개체를 테이블(table)
대한민국-스웨덴 수교 60주년 기념 행사 주 스웨덴 대한민국 대사관 (토)
선의관악종합사회복지관 김정현.
믿음의 예배 본문 창세기 4장 1절 ~ 5절 요절 로마서 12장 1절.
경찰행정과 세미나 결과를 공개해야한다. VS 비공개로 해야한다. 경찰의 근무성적평정 제도.
Part 정비사업의 절차 1 ※ : 도시주거환경정비기본계획 도시·주거환경 정비계획(안) 작성 도시·주거환경정비 기본계획 수립
Stored program 장종원
청소년 댄스 경연대회 제35회 문화체육관광부장관大賞 전국레크리에이션대회
MST – Kruskal 알고리즘 (추상적)
10장. 컴퓨터 구조에 대한 세 번째 이야기 작성자: 윤성우.
Python Tutorial 4: Data Structures
남자의피부의 고민을 한번에 싹~ 해결해주는 옴므라인
Presentation transcript:

바꾸기 mutation: 값이 아니라 물건으로 생각하기 값: 변하지 않는다 (define x 3): x는 정수값 3이다. (add1 x)은 4라는 값이다. 3이 변해서 4가 된것이 아니다. (add-element 1 S)는 S U{1} 인 집합이다. 집합 S가 변해서 1이 첨가된 집합이 되는 것이 아니다. 물건: 상태가 변한다 (add-element 1 S)는 S가 변해서 1이 첨가된 새로운 집합이 된다.

값 중심 vs 물건 중심 프로그래밍 값: 변하지 않는다 물건: 상태가 변한다 (add-element 1 S)는 S U{1} 인 집합이다. 집합 S가 변해서 1이 첨가된 집합이 되는 것이 아니다. 지금까지 이렇게 프로그램하는 것으로 은연중에 익혀왔습니다. 물건: 상태가 변한다 (add-element 1 S)는 S가 변해서 1이 첨가된 새로운 집합이 된다. 이렇게 프로그램하고 싶은 유혹이 있었을 것입니다.

값 중심 vs 물건 중심 프로그래밍 값중심 물건중심: “L을 바꿔서 L+R이되게” (define (append L R) (cond ((null? L) R) ((null? R) L) (else (cons (car L) (append (cdr L) R))) )) 물건중심: “L을 바꿔서 L+R이되게” (cond ((null? L) (make-L R; L)) (else (make-L’s cdr (append (cdr L) R); L))

바꿔!연산자들 mutators (1/3) (set! <id> <exp>) (define x 10) ... (+ x 1) ... (+ x 1) ... x의 유효범위내에서는 x는 항상 10. 그러나 이젠, (+ x 1) ... (set! x 9) ... (+ x 1) set!이후에는 x의 유효범위가 같지만 x가 9로 변해있다.

바꿔!연산자들 mutators (2/3) (set-car! <exp1> <exp2>) <exp1> 이 cons-cell이어야 한다 <exp1>의 car part가 <exp2>로 바뀐다. (define L ‘(1 2)) (set-car! L “kwang”) L ==> (“kwang” 2) (set-car! (cdr L) “teaches 102”) L ==> (“kwang” “teaches 102”) (set-car! (cdr L) ‘(“teaches” “102”)) L ==> (“kwang” (“teaches” “102”))

바꿔!연산자들 mutators (3/3) (set-cdr! <exp1> <exp2>) <exp1> 이 cons-cell이어야 한다 <exp1>의 cdr part가 <exp2>로 바뀐다. (define L ‘(1 2)) (set-cdr! L ‘(“kwang”)) L ==> (1 “kwang”) (set-cdr! (cdr L) “teaches 102”) L ==> (1 “kwang” . “teaches 102”) (set-cdr! (cdr L) ‘(“teaches” “102”)) L ==> (1 “kwang” “teaches” “102”)

바꿔!연습 1 (define x ‘(1 2)) (define y ‘(3 4)) (set-car! x y) followed by (set-cdr! x y) x ==> ((3 4) 3 4)

바꿔!연습 2 (define x ‘(1 2)) (define y ‘(3 4)) (set-car! x y) followed by (set-car! y x) x ==> (((…()…) 4) 2) ; has an abyss

바꿔!연습 3 (define x ‘(1)) (define y ‘(2)) (set-cdr! x y) x ==> (1 2) followed by (set-cdr! y x) x ==> (1 2 1 2 1 2 1 2 …) infinite list, a cycle

데이타구현: 값중심 vs 물건중심 예) 스택 stack empty: stk empty: stk push: stk * elmt -> void is-empty?: stk -> bool pop: stk -> elmt empty: stk push: stk * elmt -> stk is-empty?: stk -> bool pop: stk -> elmt * stk (define empty (cons nil nil)) (define (push s x) (let ((cell (cons x nil))) (set-cdr! cell (cdr s)) (set-cdr! s cell))) (define (is-empty? s) (null? (cdr s))) (define (pop s) (if (is-empty? s) (error) …)) (define empty ()) (define (push s x) (cons x s)) (define is-empty? null?) (define (pop s) (if (is-empty? s) (error) s)

바꿔!연산자를 이용한 물건중심구현 (1/2) 복잡하다: 프로그램짜기 어렵다 왜? 물건의 상태가 변하는 것을 추적하면서 프로그램해야. 왜? 물건이 어떻게 메모리에 구현되는지를 알아야: pointers, pointers, pointers… 왜? 예전엔 미처 생각못한 일이 벌어질 수 있다. ;; db is a list. (define (last-knowledge db) (cond ((null? db) ()) ((null? (cdr db)) (car db)) (else (last-knowledge (cdr db))))) ...;; happy programming, never imagine that db can be a cycle ...;; after 2 months, 30K lines of pgming, at a gloomy night (set-cdr! db bd) (set-cdr! bd db) ;; I need a cycle ...;; then this will kill me (last-knowledge db) ;; this never returns!

바꿔!연산자를 이용한 물건중심구현 (2/2) 필요하다: “칠판”이 필요하다 예) counter, db, 공용테이블, … 그런 물건이 간단하고 프로그램 전체적으로 그 갯수가 미리 정해져 있다면 (실행중에 계속 새롭게 만들어 지지 않고) 프로그램에 어려움없이 바꿔!연산자를 잘 이용할 수 있다.

물건중심의 프로그래밍 예: function-dispatch table ‘real ‘imag ‘mag ‘angle ‘rectangular real-r imag-r mag-r angle-r ‘polar real-p imag-p mag-p angle-p ‘xyz real-x imag-x mag-x angle-x (define (real c) ((dispatch (type c) ‘real) c))) (define (angle c) ((dispatch (type c) ‘angle) c)) (define (imag c) ((dispatch (type c) ‘imag) c)) (define (mag c) ((dispatch (type c) ‘mag) c))

층층이 속내용 감추기 Abstraction Hierarchy attach tags to data about types and reprsntns use dispatch tables for improved additivity add mul add-rational mul-rational add-complex mul-complex add-intvl mul-intvl real imag mag angle is-complex? … denom numer is-rational? … min max is-ntvl? … real-r imag-r … real-p iamg-p… pair representation pair representation rectangular representation polar representation