Ch 15. An Introduction to LISP
KU NLP
15.0 Introduction
15.1 LISP: A Brief Overview
15.1.1 Symbolic Expressions, the Syntactic Basis of LISP
15.1.2 Control of LISP Evaluation: quote and eval
15.1.3 Programming in LISP: Creating New Functions
15.1.4 Program Control in LISP: Conditionals and Predicates
15.1.5 Functions, Lists, and Symbolic Computing
15.1.6 Lists as Recursive Structures
15.1.7 Nested Lists, Structure, and car/cdr Recursion
15.1.8 Binding Variables Using set
15.1.9 Defining Local Variables Using let
15.1.10 Data Types in Common LISP
Artificial Intelligence 1
15.0 Characteristics of LISP
KU NLP
1. Language for artificial intelligence programming
a. Originally designed for symbolic computing
2. Imperative language
a. Describe how to perform an algorithm
b. Contrasts with declarative languages such as PROLOG
3. Functional programming
a. Syntax and semantics are derived from the mathematical theory of
recursive functions.
b. Combined with a rich set of high-level tools for building symbolic
data structures such as predicates, frames, networks, and objects
4. Popularity in the AI community
a. Widely used as a language for implementing AI tools and models
b. High-level functionality and rich development environment make it
an ideal language for building and testing prototype systems.
Artificial Intelligence 2
15.1 LISP: A Brief Overview
KU NLP
Syntactic elements of LISP
Symbolic expressions : S-expressions
Atom : basic syntactic units
List
Both programs and data are represented as s-expressions
Atom
Letters (upper, lower cases)
Numbers
Characters : * + - / @ $ % ^ & _ ~ .
Example
3.1416
Hyphenated-name
*some-global*
nil
x
Artificial Intelligence 3
List and S-expression
KU NLP
List
A sequence of either atoms or other lists separated by
blanks and enclosed in parentheses.
Example
(1 2 3 4)
(a (b c) (d (e f)))
Empty list “( )” : nil
nil is the only s-expression that is considered to be both an
atom and a list.
S-expression
An atom is an s-expression.
If s1, s2,…, sn are s-expressions,
then so is the list (s1 s2 … sn).
Artificial Intelligence 4
Read-Eval-Print
KU NLP
Interactive Environment
User enters s-expressions
LISP interpreter prints a prompt
If you enter
Atom: LISP evaluates itself (error if nothing is bound to the
atom)
List: LISP evaluates as an evaluation of function, i.e. that the
first item in the list needs to be a function definition (error if
no function definition is bound for the first atom), and
remaining elements to be its arguments.
> (* 7 9)
63
Artificial Intelligence 5
Control of LISP Evaluation:
KU NLP
quote & eval
quote : ‘
prevent the evaluation of arguments
(quote a) ==> a
(quote (+ 1 3)) ==> (+ 1 3)
‘a ==> a
‘(+ 4 6) ==> (+ 4 6)
eval
allows programmers to evaluate s-expressions at will
(eval (quote (+ 2 3))) ==> 5
(list ‘* 2 5) ==> (* 2 5)
(eval (list ‘* 2 5)) ==> 10
Artificial Intelligence 6
Programming in LISP:
KU NLP
Creating New Functions
Syntax of Function Definition
(defun ()
)
defun : define function
Example
(defun square (x)
(* x x))
(defun hypotenuse (x y) ;the length of the hypotenuse is
(sqrt (+ (square x) ;the square root of the sum of
(square y)))) ;the square of the other sides.
Artificial Intelligence 7
Program Control in LISP:
KU NLP
Conditionals & Predicates(1/2)
Conditions
(cond ( )
( )
...
( a
(cdr ‘(a b c)) ==> (b c)
(first ‘(a b c)) ==> a
(second ‘(a b c)) ==> b
(nth 1 ‘(a b c)) ==> b
Constructing a list
(cons ‘a ‘(b c)) ==> (a b c)
(cons ‘a nil) ==> (a)
(cons ‘(a b) ‘(c d)) ==> ((a b) c d)
Artificial Intelligence 10
Nested lists, structure,
KU NLP
car/cdr recursion
More list construction
(append ‘(a b) ‘(c d)) ==> (a b c d)
(cons ‘(a b) ‘(c d)) ==> ((a b) c d)
Counting the number of elements in the list
(length ‘((1 2) 3 (1 (4 (5))))) ==> 3
Artificial Intelligence 11
Binding variables: set(1/2)
KU NLP
(setq )
bind to
is NOT evaluated.
(set )
replace s-expression at with
is evaluated. (it must exists.)
(setf )
generalized form of set: when is a symbol, it behaves like setq;
otherwise, it behaves like set.
Artificial Intelligence 12
Binding variables: set(2/2)
KU NLP
Examples of set / setq
(setq x 1) ==> 1 ;;; assigns 1 to x
(set a 2) ==> ERROR!! ;;; a is NOT defined
(set ‘a 2) ==> 2 ;;; assigns 2 to a
(+ a x) ==> 3
(setq l ‘(x y z)) ==> (x y z)
(set (car l) g) ==> g
l ==> (g y z)
Examples of setf
(setf x 1) ==> 1
(setf a 2) ==> 2
(+ a x) ==> 3
(setf l ‘(x y z)) ==> (x y z)
(setf (car l) g) ==> g
l ==> (g y z)
Artificial Intelligence 13
Local variables: let(1/2)
KU NLP
Consider a function to compute roots of a quadratic equation:
ax2+bx+c=0
(defun quad-roots1 (a b c)
(setq temp (sqrt (- (* b b) (* 4 a c))))
(list (/ (+ (- b) temp) (* 2 a))
(/ (- (- b) temp) (* 2 a))))
(quad-roots1 1 2 1) ==> (-1.0 -1.0)
temp ==> 0.0
Local variable declaration using let
(defun quad-roots2 (a b c)
(let (temp)
(setq temp (sqrt (- (* b b) (* 4 a c))))
(list (/ (+ (- b) temp) (* 2 a))
(/ (- (- b) temp) (* 2 a)))))
Artificial Intelligence 14
Local variables: let(2/2)
KU NLP
Any variables within let closure are NOT bound at top level.
More improvement (binding values in local variables)
(defun quad-roots3 (a b c)
(let ((temp (sqrt (- (* b b) (* 4 a c))))
((denom (*2 a)))
(list (/ (+ (- b) temp) denom)
(/ (- (- b) temp) denom))))
Artificial Intelligence 15
For Homework
KU NLP
Representing predicate calculus with LISP
∀x likes (x, ice_cream)
(Forall (VAR X) (likes (VAR X) ice_cream))
∃x foo (x, two, (plus two three))
(Exist (VAR X) (foo (VAR X) two (plus two three)))
Connectives
¬S (nott S)
S1 ∧ S2 (ANDD S1 S2)
S1 ∨ S2 (ORR S1 S2)
S1 → S2 (imply S1 S2)
S1 ≡ S2 (equiv S1 S2)
Do not use the builtin predicate names.
Artificial Intelligence 16
For Homework
KU NLP
숙제를 간략하게 하기 위해서 다음 predicate만을
atomic sentence라고 가정한다.
true, false
likes (george, kate) likes (x, george)
likes (george, susie) likes (x, x)
likes (george, sarah, tuesday)
friends (bill, richard)
friends (bill, george)
friends (father_of(david), father_of(andrew))
helps (bill, george)
helps (richard, bill)
equals (plus (two, three), five)
Artificial Intelligence 17
For Homework
KU NLP
(DEFUN atomic_s (Ex)
(cond ((member Ex „(true false)) T)
((member (car Ex) „(likes …))
(Test_term (cdr Ex)))
(T nil)))
(DEFUN Test_term (ex1)
(cond ((NULL ex1) T)
((member (car ex1) „(george …..)
(test_term (cdr ex1)))
((VARP (car ex1)) (test_term (cdr ex1)))
((functionp (car ex1)) (test_term (cdr ex1)))
(T nil)))
Artificial Intelligence 18
Recursion Templates
KU NLP
Recursion template
A few standard forms of recursive Lisp functions.
You can create new functions by choosing a template and filling in
the blanks.
Recursion templates의 종류
① Double-Test Tail Recursion
② Single-Test Tail Recursion
③ Single-Test Augmenting Recursion
④ List-Consing Recursion
⑤ Simultaneous Recursion on Several Variables
⑥ Conditional Augmentation
⑦ Multiple Recursion
⑧ CAR/CDR Recursion
Artificial Intelligence 19
Double-Test Tail Recursion
KU NLP
Template :
(DEFUN func (X)
(COND (end-test-1 end-value-1)
(end-test-2 end-value-2)
(T (func reduced-x))))
Example :
Func : ANYODDP
End-test-1 : (NULL X)
End-value-1 : NIL
End-test-2 : (ODDP(FIRST X))
E nd-value-2 : T
Reduced-x : (REST X)
(defun anyoddp (x)
(cond ((null x) nil)
((oddp (first x)) t)
((t (anyoddp (rest x))))
Artificial Intelligence 20
Single-Test Tail Recursion
KU NLP
Template :
(DEFUN func (X)
(COND (end-test end-value)
(T (func reduced-x))))
Example :
Func : FIND-FIRST-ATOM
End-test : (ATOM X)
End-value : X
Reduced-x : (FIRST X)
(defun find-first-atom (x)
(cond ((atom x) x)
((t (find-first-atom (first x))))
Artificial Intelligence 21
Single-Test Augmenting Recursion(1/2)
KU NLP
Template :
(DEFUN func (X)
(COND (end-test end-value)
(T (aug-fun aug-val)
(func reduced-x))))
Example1 :
Func : COUNT-SLICES
End-test : (NULL X)
End-value : 0
Aug-fun : +
Aug-val : 1
Reduced-x : (REST X)
(defun count-slices (x)
(cond ((null x) 0)
(t (+ 1 (count-slices (rest x))))))
Artificial Intelligence 22
Single-Test Augmenting Recursion(2/2)
KU NLP
Example2: The Factorial Function
(defun fact (n)
(cond ((zerop n) 1)
(t (* n (fact (- n 1))))))
Artificial Intelligence 23
List-Consing Recursion
(A Special Case of Augmenting Recursion)
KU NLP
Template :
(DEFUN func (N)
(COND (end-test NIL)
(T (CONS new-element
(func reduced-n)))))
Example :
Func : LAUGH
End-test : (ZEROP N)
New-element : ‘HA
Reduced-n : (- N 1)
(defun laugh (n)
(cond ((zerop n) nil)
(t (cons „ha (laugh (- n 1))))))
Artificial Intelligence 24
Simultaneous Recursion on Several Variables
(Using the Single-Test Recursion Template)
KU NLP
Template :
(DEFUN func (N X)
(COND (end-test end-value)
(T (func reduced-n reduced-x))))
Example :
Func : MY-NTH
End-test : (ZEROP N)
End-value : (FIRST X)
Reduced-n : (- N 1)
Reduced-x : (REST X)
(defun my-nth (n x)
(cond ((zerop n) (first X)
(t (my-nth (- n 1) (rest x)))))
Artificial Intelligence 25
Conditional Augmentation (1/2)
KU NLP
Template
(DEFUN func (X)
(COND (end-test end-value)
(aug-test (aug-fun aug-val
(func reduced-x)))
(T (func reduced-x))))
Example
Func : EXTRACT-SYMBOLS
End-test : (NULL X)
End-value : NIL
Aug-test : (SYMBOLP (FIRST X))
Aug-fun : CONS
Aug-val : (FIRST X)
Reduced-x : (REST X)
Artificial Intelligence 26
Conditional Augmentation (2/2)
KU NLP
(defun extract-symbols (X)
(cond ((null x) nil)
((symbolp (first x))
(cons (first x)
(extract-symbols (rest x))))
(t (extract-symbols (rest x)))))
Artificial Intelligence 27
Multiple Recursion(1/2)
KU NLP
Template :
(DEFUN func (X)
(COND (end-test1 end-value-1)
(end-test2 end-value-2)
(T (combiner (func first-reduced-n)
(func second-reduced-n)))))
Example :
Func : FIB
End-test-1 : (EQUAL N 0)
End-value-1 : 1
End-test-2 : (EQUAL N 1)
End-value-2 : 1
Combiner : +
First-reduced-n : (- N 1)
Second-reduced-n : (- N 2)
Artificial Intelligence 28
Multiple Recursion(2/2)
KU NLP
(defun fib (n)
(cond (equal n 0) 1)
(equal n 1) 1)
(t (+ (fib (- n 1))
(fib (- n 2))))))
Artificial Intelligence 29
CAR/CDR Recursion
(A Special Case of Multiple Recursion)(1/2)
KU NLP
Template :
(DEFUN func (X)
(COND (end-test-1 end-value-1)
(end-test-2 end-value-2)
(T (combiner (func CAR X))
(func (CDR X))))))
Example :
Func : FIND-NUMBER
End-test-1 : (NUMBERP X)
End-value-1 : X
End-test-2 : (ATOM X)
End-value-2 : NIL
Combiner : OR
Artificial Intelligence 30
CAR/CDR Recursion
(A Special Case of Multiple Recursion)(2/2)
KU NLP
(defun find-number (x)
(cond ((numberp x) x)
((atom x) nil)
(t (or (find-number (car x))
(find-number (cdr x))))))
Artificial Intelligence 31
연습문제
KU NLP
VECTORPLUS X Y
: Write a function (VECTORPLUS X Y) which takes two lists
and adds each number at the same position of each list.
예) (VECTORPLUS „(3 6 9 10 4) „(8 5 2))
→ (11 11 11 10 4)
답)
(DEFUN VECPLUS (X Y)
(COND
((NULL X) Y)
((NULL Y) X)
(T (CONS (+ (CAR X) (CAR Y)
(VECPLUS (CDR X) (CDR Y))))))
Artificial Intelligence 32