lists defined inductively
play

Lists defined inductively ( A ) is the smallest set satisfying this - PowerPoint PPT Presentation

Lists defined inductively ( A ) is the smallest set satisfying this equation: LIST ( A ) f (cons a as ) j a 2 A ; as LIST( A ) g f () g LIST = [ 2 Equivalently, LIST ( A ) is defined by these rules: (E MPTY ) 2 List ( A ) () a 2 A as 2


  1. Lists defined inductively ( A ) is the smallest set satisfying this equation: LIST ( A ) f (cons a as ) j a 2 A ; as LIST( A ) g f ’() g LIST = [ 2 Equivalently, LIST ( A ) is defined by these rules: (E MPTY ) 2 List ( A ) ’() a 2 A as 2 List ( A ) (C ONS ) (cons a as ) 2 List ( A )

  2. One more inductive definition A list of A is one of: • The empty list ’() • (cons a as) , where a is an A and as is a list of A

  3. Lists generalized: S-expressions An ordinary S-expression is one of: • An atom (symbol, number, Boolean) • A list of ordinary S-expressions Can write literally in source, with quote

  4. � Scheme vs Impcore New abstract syntax: LET (keyword, names, expressions, body) LAMBDAX (formals, body) APPLY (exp, actuals) New concrete syntax for LITERAL: (quote S-expression ) ’ S-expression

  5. Equations and function for append (append ’() ys) == ys (append (cons z zs) ys) == (cons z (append zs ys)) (define append (xs ys) (if (null? xs) ys (cons (car xs) (append (cdr xs) ys))))

  6. Naive list reversal (define reverse (xs) (if (null? xs) ’() (append (reverse (cdr xs)) (list1 (car xs)))))

  7. Reversal by accumulating parameters (define revapp (xs ys) ; return (append (reverse xs) ys) (if (null? xs) ys (revapp (cdr xs) (cons (car xs) ys)))) (define reverse (xs) (revapp xs ’()))

  8. A-list example -> (find ’Building ’((Course 105) (Building Barnum) (Instructor Ramsey))) Barnum -> (val nr (bind ’Office ’Halligan-222 (bind ’Courses ’(105 150TW) (bind ’Email ’comp105-grades ’())))) ((Email comp105-grades) (Courses (105 150TW)) (Office Halligan-222)) -> (find ’Office nr) Halligan-222 -> (find ’Favorite-food nr) ()

  9. Laws of association lists (find k (bind k v a-l)) = v (find k (bind k’ v a-l)) = (find k a-l), provided k != k’ (find k ’()) = ’() --- bogus!

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend