cons 1 2 1 2 cons 1 cons

  • Slides: 10
Download presentation

 • (cons 1 2) 1 2 • (cons 1 (cons 2 ())) 1

• (cons 1 2) 1 2 • (cons 1 (cons 2 ())) 1 2 • (car <expr>) (cdr <expr>) car cdr

Types • • cons : t 1 * t 2 -> (t 1 t

Types • • cons : t 1 * t 2 -> (t 1 t 2) car : (t 1 t 2) -> t 1 cdr : (t 1 t 2) -> t 2 (): nil introduction for (t 1 t 2) elimination for (t 1 t 2) (cons 1 #t) : (int bool) (cons 1 2) : (int int) (car (cons 1 2)) : int (cdr (cons 1 2)) : int (cons 1 ()) : (int nil) (cons 2 (cons 1 ())): (int nil))

list: sugar for nested cons • (list) = () • (list 1) = (cons

list: sugar for nested cons • (list) = () • (list 1) = (cons 1 ()) • (list 1 2) = (cons 1 (cons 2 ())) • (list <e 1> <e 2> … <e. N>) = (cons <e 1> (cons <e 2> … (cons <e. N> ())…)

‘<exp>: sugar for (quote <exp>) • (quote <exp>) does not evaluate <exp>; return <exp>

‘<exp>: sugar for (quote <exp>) • (quote <exp>) does not evaluate <exp>; return <exp> as it is • ‘<exp> = (quote <exp>) • ‘<name> evaluates to <name>, not its value • ‘(1 2 3) = (quote (1 2 3)) = (list ‘ 1 ‘ 2 ‘ 3) • ‘(x y z) = (quote (x y z)) = (list ‘x ‘y ‘z) • ‘(<e 1> … <e. N>) = (quote (<e 1>…<e. N>)) = (list ‘<e 1> … ‘<e. N>)

Types • int-list = = = • int-list를 int가 0개 이상 있는 리스트 nil

Types • int-list = = = • int-list를 int가 0개 이상 있는 리스트 nil | (int nil)) | … nil | (int int-list) 만드는 방법 2가지: – nil 값 – int 값을 int-list 값의 앞에 붙인것 • () : t-list • cons : t * t-list -> t-list • car : t-list -> t • cdr : t-list -> t-list • null? : t-list -> bool (cons 1 ()) : int-list (cons 2 (cons 1 ())): int-list

Types • 타입 t+t’ list = t 혹은 t’ 원소가 0개 이상 있는 리스트

Types • 타입 t+t’ list = t 혹은 t’ 원소가 0개 이상 있는 리스트 = nil | (t+t’ nil)) | … = nil | (t+t’ list)) ‘(1 #t) : int+bool list • nil : t+t’ list • cons : (t+t’) * (t+t’ list) -> t+t’ list • car : t+t’ list -> t+t’ • cdr : t+t’ list -> t+t’ list • null? : t+t’ list -> bool (cons “a” (cons 1 nil)) : (string+int) list (car (cons “a” (cons 1 nil))) : string

Typeful programming (define (aging animal) (define (add-age x) (cond ((is-name? x) (string-append x “님”))

Typeful programming (define (aging animal) (define (add-age x) (cond ((is-name? x) (string-append x “님”)) ((is-integer? x) (+ x 1)) )) (if (null? animal) () case analysis (cons (add-age (car animal)) on types (aging (cdr animal)) )