Download presentation
Presentation is loading. Please wait.
Published byCandice Harrell Modified over 8 years ago
1
Design Constraints in Data Implementation data abstraction (abstraction barrier) is good. the performance of the users of the data depends on the implementation/representation of the data.
2
Data Abstraction Example 3: Set set 만드는 방법 – emptyset: set – add-elmt: * set -> set set 사용하는 방법 – emptyset?: set -> bool – get-elmt: set -> * set – member?: * set -> bool – union: set * set -> set – intersection: set * set -> set – exclusion: set * set -> set
3
Implementation Choices for Set choice 1: unordered list choice 2: ordered list choice 3: binary search tree implementation choice can determine the performance
4
데이터에 꼬리표 붙이기 Tagged data 꼬리표가 붙은 데이터 = 데이타마다 “ 소속 ” 정보가 매달려 있다. 데이터를 이용할 때는 그 소속을 확인하고 그 소속에 맞는 작업을 한다.
5
데이터에 꼬리표 붙이기: 왜? 하나의 data type을 만드는 다양한 방법이 있다. – tree인 경우: leaf, node – list인 경우: nil, link – symbolic expression인 경우: const, var, sum, product 주어진 data가 어떤 경우인가? 를 알수 있게 하려 면? 꼬리표를 덧붙인다. – leaf tree인가? node tree인가? – nil list인가? link list인가? – const expr인가? var expr인가? sum expr인가? product expr인가?
6
tree data tree 만들기 – leaf : -> tree – node : tree list -> tree tree 사용하기 – leaf-val : tree -> – is-leaf? : tree -> bool – is-empty-tree? : tree -> bool – nth-subtree : tree * nat -> tree
7
(define leaf-tag ‘ l) (define node-tag ‘ n) (define (leaf v) (cons leaf-tag v)) (define (node lst) (cons node-tag lst)) (define (is-empty-tree? tree) (and (equal? (car tree) node-tag) (null? (cdr tree)) ) (define (is-leaf? tree) (equal? (car tree) leaf-tag) )
8
boolean circuit data boolean circuit 만들기 – one: circuit – zero: circuit – not : circuit -> circuit – and : circuit * circuit -> circuit – or : circuit * circuit -> circuit boolean circuit 사용하기 – is-one? : circuit -> bool – is-zero? : circuit -> bool – is-not? : circuit -> bool – is-and? : circuit -> bool – is-or? : circuit -> bool – nth-circuit : circuit * nat -> circuit
9
(define one-tag ‘ one) (define zero-tag ‘ zero) (define not-tag ‘ not) (define and-tag ‘ and) (define or-tag ‘ or) (define one one-tag) (define zero zero-tag) (define (not circuit) (cons not-tag circuit)) (define (and c1 c2) (cons and-tag (cons c1 c2))) (define (or c1 c2) (cons or-tag (cons c1 c2))) (define (is-one c) (equal? one-tag c)) (define (is-zero c) (equal? zero-tag c)) (define (is-and c) (equal? and-tag (car c))) (define (is-or c) (equal? or-tag (car c)))
10
symbolic expression data 식 만들기 – const : int -> expr – var : string -> expr – sum : expr * expr -> expr – product : expr * expr -> expr 식 사용하기 – is-const? : expr -> bool – is-var? : expr -> bool – is-sum? : expr -> bool – is-product? : expr -> bool – const-val: expr -> int – var-name: expr -> string – addend: expr -> expr – augend: expr -> expr – multiplier: expr -> expr – multiplicand: expr -> expr
11
(define const-tag ‘ c) (define var-tag ‘ v) (define sum-tag ‘ +) (define prod-tag ‘ *) (define (const n) (cons const-tag n)) (define (var x) (cons var-tag x)) (define (sum e1 e2) (cons sum-tag (cons e1 e2))) (define (product e1 e2) (cons prod-tag (cons e1 e2))) (define (is-const? e) (equal? (car e) const-tag)) (define (is-var? e) (equal? (car e) var-tag)) (define (is-sum? e) (equal? (car e) sum-tag)) (define (is-product? e) (equal (car e ) prod-tag))
12
꼬리표를 붙이면 또 어떤 잇점이? 안전한 프로그래밍 defensive programming – 함수들이 주어진 데이터가 적절한지 첵크하기 좋다: sanity check, type check – 중요: 최대한 빨리 오류를 감지하기. 데이타가 주도하는 프로그래밍 data- directed programming – 함수들이 주어진 데이터의 소속에 따라서 하는 일을 정한다.
13
안전한 프로그래밍 defensive programming dynamic type checking: – 함수의 인자가 그 함수가 예상하는 타입의 인자 인가? – 그러하면, 그 중에서 어떤 경우인가? (define (nth-child tree n) (cond ((is-leaf? tree) (error)) ((is-empty-tree? tree) (error)) ((< n 0) (error)) (else … ) )
14
안전한 프로그래밍 defensive programming 안전수칙 0: 함수를 정의할 때, 함수 타입에 맞는 데이터를 받는지 확인한다. 꼬리표+기타 방식으로. 안전수칙 1: 함수를 정의할 때, 타입에 맞는 데이터 중에서 원하는 경우의 데이터인지를 확인한다. 꼬리 표를 가지고. 안전불감증 vs 안전집착: – 불감 보다는 집착이 좋다. – 실행중에 “ 옳지않은 ” 값이 나도 모르게 흘러다니는 것 보다는 그럴 경우 바로 중단시키는 것이 좋다.
15
안전수칙을 지키고 있는가? (define (nth-child tree n) (cond ((is-leaf? tree) (error)) ((is-empty-tree? tree) (error)) ((< n 0) (error)) (else … ) ) (nth-child a-node-tree (fac 10)) (nth-child (cons 1 2) 1) 어떻게되나?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.