Data Structures in Lisp

Slides:



Advertisements
Similar presentations
Introduction to LISP Programming of Pathway Tools Queries and Updates.
Advertisements

Lisp Control and Data Structures CIS 479/579 Bruce R. Maxim UM-Dearborn.
ANSI Common Lisp 3. Lists 20 June Lists Conses List Functions Trees Sets Stacks Dotted Lists Assoc-lists.
1 Programming Languages and Paradigms Lisp Programming.
CSE 341, S. Tanimoto Pattern Matching - 1 Pattern Matching in Lisp Lists can be used to represent sentences, relations, tree structures, etc. (this list.
Functional Programming COMP2003 A course on functional programming using Common Lisp Dr Eleni Mangina
Arrays (1) You create an array in LISP by using the function (make- array ). All elements are initially set to nil. To create a 1-dimensional array of.
Introduction to Artificial Intelligence Lisp Ruth Bergman Fall 2002.
Introductory Lisp Programming Lecture # 2 Main Topics –Basic Lisp data types –Lisp primitives –Details of list handling Cons cells (boxes) & their representation.
ANSI Common Lisp 4. Specialized Data Structures 7 June 2003.
CSE 341, S. Tanimoto Lisp Data Structures - 1 Data Structures in Lisp 0. Collections of associations, association lists. 1. Creating graphs with conses.
LISP 1.5 and beyond A very quick tour. Data Atoms (symbols) including numbers – All types of numbers including Roman! (well, in the early days) – Syntactically.
Allegro CL Certification Program Lisp Programming Series Level I Session Top Ten Things to Know.
Advanced Functions In CL, functions are often supplied as parameters to other functions –This gives us tremendous flexibility in writing functions whose.
Functional Programming
Functional Programming 02 Lists
Input/Output Chapters 7 & 9. Output n Print produces output > (print 100) n It also returns the value it printed –that’s where the second 100 came.
CSE S. Tanimoto Lisp Lisp S-Expressions: ATOMs Every Lisp object is either an ATOM or a CONS Symbols and numbers are kinds of atoms: X, APPLE,
Mitthögskolan 10/8/ Common Lisp LISTS. Mitthögskolan 10/8/2015 2Lists n Lists are one of the fundamental data structures in Lisp. n However, it.
1 Lisp Functions –Built-in functions –Defining functions –Function Evaluation and Special Forms defun, if Control statements –Conditional if, cond –Repetition.
1 More About Lisp. 2 Functions on Lists (setf x '(a b c)) => (A B C) (setf y '(1 2 3)) => (1 2 3) (rest x) => (B C) ;;all but the first element (nth 1.
CSE 341, S. Tanimoto Lisp Defining Functions with DEFUN Functions are the primary abstraction mechanism available in Lisp. (Others are structures.
Lisp Files, Arrays, and Macros CIS 479/579 Bruce R. Maxim UM-Dearborn.
Lisp Functional Language or Applicative Language –Achieves its effect by applying functions, either recursively or through composition Powerful, expressive,
Beyond Lists: Other Data Structures Lisp would still be a pretty decent programming language if it only contained atoms and lists –But we can go far beyond.
LISP Data Types Functional Programming Academic Year Alessandro Cimatti
Introduction to LISP. Lisp Extensible: It lets you define new operators yourself Lisp programs are expressed as lisp data structures –You can write programs.
UMBC CMSC Common Lisp II. UMBC CMSC Input and Output Print is the most primitive output function > (print (list 'foo 'bar)) (FOO BAR) The.
PRACTICAL COMMON LISP Peter Seibel 1.
C++ String Class nalhareqi©2012. string u The string is any sequence of characters u To use strings, you need to include the header u The string is one.
Milos Hauskrecht (PDF) Hieu D. Vu (PPT) LISP PROGARMMING LANGUAGE.
Lists CSC 358/ Outline Lab #1 / Homework #1 Lists A question List Internals of Lists List operations Extended Example.
CSE S. Tanimoto Lisps's Basic Functionality 1 LISP: Basic Functionality S-expressions Conses Lists Predicates Evaluation and quoting Conditional.
Lisp S-Expressions: ATOMs
Data Structures in Lisp
CSE (c) S. Tanimoto, 2002 AI Techniques
Getting Started with Lisp
LISP A brief overview.
Strings: Tries, Suffix Trees
Chapter 7: Strings and Characters
CHAPTER THREE Sequences.
First Lecture on Introductory Lisp
J.E. Spragg Mitthögskolan 1997
Imperative Data Structures
Modern Programming Languages Lecture 21 Fakhar Lodhi
Data abstraction, revisited
CSE 373: Data Structures and Algorithms
CSE 373 Data Structures and Algorithms
Allegro CL Certification Program
CSE 373, Copyright S. Tanimoto, 2002 Hashing -
CSE (c) S. Tanimoto, 2004 AI Techniques
Functional Programming Concepts
LISP A brief overview.
Functional Programming Concepts
Lisp: Representation of Data
Defining Functions with DEFUN
Abstraction and Repetition
String Processing 1 MIS 3406 Department of MIS Fox School of Business
Bindings, Scope, and Extent
Strings: Tries, Suffix Trees
Data Structures in Lisp
LISP: Basic Functionality
Functional Programming Concepts
LISP: Basic Functionality
Bindings, Scope, and Extent
Common Lisp II.
LISP: Basic Functionality
Lisp: Representation of Data
Dr. Khizar Hayat Associate Prof. of Computer Science
Procedures with optional parameters which do not require matching arguments Example: consider the exponent function which may take one argument, m, in.
Presentation transcript:

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. Hash tables 6. Strings CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

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 alternatives to represent collections of associations in Lisp. (e.g., Hash tables) CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

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

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures 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 CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures 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 CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures 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 CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures 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. > CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures 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 CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures Strings A Lisp string is written as a sequence of characters between double quotes. "This is a string." Double quotes can be entered using the backslash character "Here is a \"string within a string\"." Backslashes can be included by using a double backslash: "c:\\windows\\system\\temp.txt" A string is a one-dimensional array of characters. CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures Constructing Strings Concatenation > (concatenate 'string "Happy" " " "Birthday!") "Happy Birthday!" Character-by-character manipulation > (setq str (make-string 5 :initial-element #\A)) "AAAAA" > (setf (aref str 2 #\C)) #\C > str "AACAA" CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures Comparing Strings > (string= "happy" "happy") T > (string= "hapPy" "happy") NIL > (string/= "hapPy" "happy") 3 > (string-equal "hapPy" "happy") > (string-lessp "John" "johnny") 4 > (string< "John" "johnny") > (equal "hapPy" "happy") > (equalp "hapPy" "happy") CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

String Input and Output > (setq line (read-line))This is a line of text. "This is a line of text." > (print line) > (format t "The input was: ~S" line) The input was: "This is a line of text." NIL > (format t "The input was: ~A" line) The input was: This is a line of text. > (setq line2 (format nil (format t "The input was: ~A" line))) "The input was: This is a line of text." CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures String Matching > (search "line" "This is a line of text.") 10 > (search "line" "THIS IS A LINE OF TEXT.") NIL > (search "line" "THIS IS A LINE OF TEXT." :test #'char-equal) > (search "xy9" "abcde01234" :key #'digit-char-p) 3 ; SEARCH works not only on strings but all sequences. > (search '(0 1) '(0 0 0 1 1 1)) 2 > (search '(0 1) '(2 4 8 7 5 3) :key #'evenp) CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures

CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures Substring Extraction > (subseq "This is a line of text." 10 14) "line" > (subseq "The remainder of the line." 4) "remainder of the line." > (setf (subseq "Let’s censor it." 6 12) "XYZXYZXYZW") "Let’s XYZXYZ it." CSE 415 -- (c) S. Tanimoto, 2002 Lisp Data Structures