Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property...

16
Spring 2008 Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008

Transcript of Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property...

Page 1: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

1

Topic 6 Hierarchical Data and the Closure

Property

Section 2.2.1

September 2008

Page 2: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

2

Box and pointer notation

• Draw cdr pointers to the right• Draw car pointers downward(cons 1 2)

2

1

Page 3: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

3

Another list structure

(cons (cons 1 2) (cons 3 4))

4

2 3

1

Page 4: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

4

The closure property

• A constructor has the closure property if it can take data of a certain type as input and return data of the same type

• cons is an example

• Such constructors can be used to build hiearchical structures

Page 5: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

5

Lists, a recursive data type

• The empty list is a list

• If x is any datum and y is a list, then

(cons x y) is a list

• The empty list is denoted by empty in DrScheme and by nil in the course textbook

• Whenever you see nil in the book, read empty

Page 6: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

6

What do lists look like?

(cons 1 ( cons 2 (cons 3 (cons 4 empty))))(1 2 3 4)

1 2 3 4

Page 7: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

7

Lists can contain lists

(cons 1 (cons (cons 2 (cons 3 empty)) (cons 4 (cons (cons 5 (cons 6 empty)) empty))))

(1 (2 3) 4 (5 6))

Page 8: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

8

Box and pointer representation

1 4

2 33

5 6

Page 9: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

9

Printing out list structures

Printed like lists, but if the last cdr in a cdr chain points to a primitive datum other than empty, the primitive datum is printed with a dot in front of it.

Page 10: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

10

A comparison

1 2 3 4(1 2 3 4)

4

1 2 3(1 2 3 . 4)

Page 11: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

11

Some service procedures for lists

(list 1 2 3 4) --> (1 2 3 4)

;; takes a list with at least n elements

;; and returns the nth element of the list

;; note counting starts from 0(define (our-list-ref lst n) (if (= n 0) (car lst) (our-list-ref (cdr lst) (- n 1))))

(our-list-ref (list 1 2 3 4) 0) --> 1(our-list-ref (list 1 2 3 4) 2) --> 3

Page 12: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

12

More service procedures

(define (null? x) (equal? x empty))

; takes a list and returns the number; of elements in the list(define (our-length list) (if (null? list) 0 (+ 1 (our-length (cdr list)))))

Page 13: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

13

our-member

; takes an element and a list and returns non-#f if

; ele is in the list

(define (our-member ele lst)

(cond ((null? lst) #f)

((equal? ele (car lst)) lst)

(else (our-member ele (cdr lst)))))

Page 14: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

14

• (first-n lst n)

Page 15: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

15

Append; takes two lists and returns a list; containing the elements of the ; original 2(define (our-append list1 list2) (if (null? list1) list2 (cons (car list1) (our-append (cdr list1) list2))))

(our-append (list 1 2) (list 3 4)) --> (1 2 3 4)

Page 16: Spring 2008Programming Development Techniques 1 Topic 6 Hierarchical Data and the Closure Property Section 2.2.1 September 2008.

Spring 2008 Programming Development Techniques

16

Notes

• Procedures list-ref, null?, eq?, length, and append are predefined procedures in Scheme

• Procedure append can append any number of lists together

• Procedure pair? returns #t if its argument is a pair, else #f