1 / 18

Understanding Lisp: A Functional Language Overview

This document introduces Lisp as a powerful functional programming language, highlighting its core data structures—atoms and linked lists. It explains that everything in Lisp can be classified as an atom or a list, detailing the nature of numeric and literal atoms, as well as the significance of reserved words. Through interactive examples, users will learn about arithmetic, list functions, and eval/quote mechanisms. The guide serves as an essential resource for programmers seeking to grasp Lisp's unique approach to data and code equivalence, making it easier to build dynamic and executable structures.

kendall
Download Presentation

Understanding Lisp: A Functional Language Overview

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Basic Lisp CIS 479/579 Bruce R. Maxim UM-Dearborn

  2. What is Lisp? • A functional language includes linked lists as a built-in data type • Everything in lisp is either an atom or a list (expression) • Lisp is dynamically typed • It is possible to define executable data structures because data and code are equivalent

  3. Lists and Atoms • Consider the linked list ‘(a b c) a is an atom b is an atom c is an atom • Atoms have both names and values • Often times in Lisp programming you will work with the name and ignore the value

  4. Literal and Numeric Atoms • Numeric atoms • (name matches value) 12 or –1.53 • Literal atoms • begin with letter • value is undefined when created a or Sam

  5. Pre-Defined Literal Atoms • T or t • True (logical constant) • Nil or nil • Nil = ‘( ) meaning the "empty list“ • False (logical constant) • There are no reserved words in Lisp to that means t or nil can be redefined by the user

  6. Using Lisp • Lisp is a interactive system • You can files to be processed as a batch file, but more often than not the programmer is the “main program” • Every expression typed a the “>” prompt is “read” and “evaluated” unless it is prefixed with an apostrophe ‘ • Typing (exit) at the “>” prompt terminates the xlisp program

  7. Sample Output >(a b c) error: unbound function - a if continued: try evaluating symbol again 1> [ back to top level ] > '(a b c) (a b c) > 1 1 > 1.2 1.2 > a error: unbound variable - a if continued: try evaluating symbol again 1> [ back to top level ]

  8. Sample Output > nil nil > t t > T t > '(a (b c) d) (a (b c) d) > (setq sam 'abc) abc > sam abc

  9. Arithmetic Functions > (/ 2 3) 2/3 > (/ 1.0 2) 0.5 > (1+ 3) 4 > (mod 2 3) 2 > (mod 5 2) 1 > (+ (* 2 2) (/ 4.0 5) ) 4.8

  10. car=first and cdr=rest > (car '(a b c)) a > (cdr '(a b c)) (b c) > (car nil) nil > (cdr nil) nil > (first '(a b c)) a > (car (cdr '(a b c))) b > (cadr '(a b c)) b

  11. List Functions > (list 'a 2 'b) (a 2 b) > (list '(a b) '(c d)) ((a b) (c d)) > (list sam c) error: unbound variable - c if continued: try evaluating symbol again 1> [ back to top level ] > (list sam 'c) (abc c) > (cons 'a '(b c d)) (a b c d) > (cons '(a b c) 'd) ((a b c) . d)

  12. List Functions > (append '(a b) '(c d)) (a b c d) > (reverse '(a b c d)) (d c b a) > (length '(a (b c) d))) 3 > > (last '(a b c d)) (d) > (subst 'a 'b '(a b c)) (a a c) > (subst 'a 'b '(a b c b)) (a a c a)

  13. eval and quote > (eval (cdr '(a + 2 3))) 5 > (setq a 'b) b > a b > b error: unbound variable - b if continued: try evaluating symbol again 1> [ back to top level ] > (set 'a 'b) b > (eval (eval ''a)) b > 'a a

  14. eval and quote > (eval (eval '(quote a))) b > 'a a > (eval '(list '* 9 6)) (* 9 6) > (eval (eval '(list * 9 6))) error: bad function - (* 9 6) 1> [ back to top level ] > (eval (eval '(list '* 9 6))) 54

  15. Function Definition > (defun intro (x y) (list x 'this 'is y) ) Intro >; be careful not to quote the arguments when >; defining the function > (intro 2 3) (2 this is 3) > (intro 'stanley 'livingston) (stanley this is livingston)

  16. Predicate Functions > (atom 2) t > (atom '(a b c)) nil > (listp 2) nil > (listp '(a b c)) t > (equal 2 3) nil > (= 2 3) nil > (equal 6 (* 2 3)) t

  17. Predicate Functions > (set a ‘(1 2)) (1 2) > (equal a ‘(1 2)) t > (eql a ‘(1 2)) nil > (null '()) t > (null 2) nil > nil nil > (null nil) t

  18. Membership Functions > (member 'c '(a b c d)) (c d) > (member 'a '((a b) c d)) nil > (member '(d e) '((a b) c (d e) f)) nil > (assoc 'c '((a b) (c d) (e f))) (c d)

More Related