Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSE 341, S. Tanimoto Lisp Data Structures - 1 Data Structures in Lisp 0. Collections of associations, association lists. 1. Creating graphs with conses.

Similar presentations


Presentation on theme: "CSE 341, S. Tanimoto Lisp Data Structures - 1 Data Structures in Lisp 0. Collections of associations, association lists. 1. Creating graphs with conses."— Presentation transcript:

1 CSE 341, S. Tanimoto Lisp Data Structures - 1 Data Structures in Lisp 0. Collections of associations, association lists. 1. Creating graphs with conses. RPLACA and RPLACD (destructive editing) 2. Adjacency lists. 3. Sequences 4. Arrays 5. Hashtables

2 CSE 341, S. Tanimoto Lisp Data Structures - 2 Collections of Associations A collection of associations can be thought of as a set, a function, or a many-many mapping. CONS is the fundamental mechanism for association in Lisp. An association list is a list of CONSes. However, for reasons of efficiency, there are alternative to represent collections of associations in Lisp.

3 CSE 341, S. Tanimoto Lisp Data Structures - 3 Direct Manipulation of Conses > (setq x (cons 'a 'b)) (A. B) > (rplaca x 'c) (C. B) > x (C. B) > (rplacd x 'd) (C. D) > (rplacd x x) (C C C C C C C C C C... ) >

4 CSE 341, S. Tanimoto Lisp Data Structures - 4 Adjacency Lists Nowadays, RPLACA and RPLACD are less used. Straight lists are more common. Memory space is less of a concern. (setq nodes '(a b c d)) (setq arc-lists '( (a (b c)) (b (d)) (c (d)) (d ()) ) (defun is-edge (x y) (member y (second (assoc x arc-lists))) ) (is-edge 'a 'c) ; => (C) i.e., true. (is-edge 'a 'd) ; => NIL A C B D

5 CSE 341, S. Tanimoto Lisp Data Structures - 5 Sequences A sequence can be thought of as a mapping from {0, 1,..., n-1} to a set of range elements. A string is a sequence of characters. A list is a particular form of sequence of lisp objects. (typep "abc" 'sequence) ; => T. (typep '(a b c) 'sequence) ; => T. (concatenate 'string "abc" "def"); => "abcdef" (concatenate 'list '(a b) '(c d)); =>(a b c d) (elt '(a b c d) 2) ;=> C

6 CSE 341, S. Tanimoto Lisp Data Structures - 6 Arrays An array is a mapping from a set of index tuples to a set of range elements. (setq a (make-array '(5 10):initial-element 1)) #2A((1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1)) (setf (aref a 4 9) 2) 2 (let ((sum 0)) (dotimes (i 5 sum)(dotimes (j 10) (incf sum (aref a i j)) )) ) 51

7 CSE 341, S. Tanimoto Lisp Data Structures - 7 Hashtables Association lists are linear and slow. For larger sets of associations, hashtables tend to be much faster. > (let ((h (make-hash-table))) (defun get-h (key) (gethash key h)) (defun put-h (key value) (setf (gethash key h) value)) ) PUT-H > (put-h 'x 'y) Y > (get-h 'x) Y ; The value associated with X T ; True, there is a value. >

8 CSE 341, S. Tanimoto Lisp Data Structures - 8 MAPHASH ; Changes each entry in THE-HASH-TABLE, ; replacing each positive value with its ; square root, and removing negative values. (maphash ; Steele’84, p285. #'(lambda (key value) (if (minusp value) (remhash key the-hash-table) (setf (gethash key the-hash-table) (sqrt value)))) the-hash-table) ; returns NIL


Download ppt "CSE 341, S. Tanimoto Lisp Data Structures - 1 Data Structures in Lisp 0. Collections of associations, association lists. 1. Creating graphs with conses."

Similar presentations


Ads by Google