Artificial Intelligence 1
KU NLPKU NLP
Ch 15. An Introduction to LISP
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 Predicate
s 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 2
KU NLPKU NLP
15.0 Characteristics of LISP
1. Language for artificial intelligence programminga. Originally designed for symbolic computing
2. Imperative languagea. Describe how to perform an algorithmb. Contrasts with declarative languages such as PROLOG
3. Functional programminga. 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 communitya. Widely used as a language for implementing AI tools and modelsb. High-level functionality and rich development environment make it
an ideal language for building and testing prototype systems.
Artificial Intelligence 3
KU NLPKU NLP
15.1 LISP: A Brief Overview
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 4
KU NLPKU NLP
List and S-expression
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 5
KU NLPKU NLP
Read-Eval-Print
Interactive EnvironmentUser enters s-expressionsLISP 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 6
KU NLPKU NLP
Control of LISP Evaluation: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 7
KU NLPKU NLP
Programming in LISP:Creating New Functions
Syntax of Function Definition (defun <function-name> (<formal parameters>)
<function body>) 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 8
KU NLPKU NLP
Program Control in LISP:Conditionals & Predicates(1/2)
Conditions (cond (<condition 1> <action1>) (<condition 2> <action 2>) ...
(<condition n> <action n)) Evaluate the conditions in order until one of the condition returns a
non-nil value Evaluate the associated action and returns the result of the action
as the value of the cond expression
Predicates Example
(oddp 3) ; whether its argument is odd or not
(minusp 6) (numberp 17)
Artificial Intelligence 9
KU NLPKU NLP
Conditionals & Predicates(2/2)
Alternative Conditions (if test action-then action-else)
(defun absolute-value (x)
(if (< x 0) (- x) x)) it returns the result of action-then if test return a non-nil value it return the result of action-else if test returns nil
(and action1 ... action-n) ; conjunction Evaluate arguments, stopping when any one of arguments evaluates to
nil
(or action1 ... action-n) ; disjunction
Evaluate its arguments only until a non-nil value is encountered
Artificial Intelligence 10
KU NLPKU NLP
List as recursive structures
Cons cell: data structure to hold a list in LISP car - holds the first element. cdr - holds the rest in the list.
Accessing a list (car ‘(a b c)) ==> 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 11
KU NLPKU NLP
Nested lists, structure, 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 12
KU NLPKU NLP
Binding variables: set(1/2)
(setq <symbol> <form>) bind <form> to <symbol> <symbol> is NOT evaluated.
(set <place> <form>) replace s-expression at <place> with <form> <place> is evaluated. (it must exists.)
(setf <place> <form>) generalized form of set: when <place> is a symbol, it behaves like setq;
otherwise, it behaves like set.
Artificial Intelligence 13
KU NLPKU 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)
Binding variables: set(2/2)
Artificial Intelligence 14
KU NLPKU NLP
Local variables: let(1/2)
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 15
KU NLPKU 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))))
Local variables: let(2/2)
Artificial Intelligence 16
KU NLPKU NLP
For Homework
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 17
KU NLPKU NLP
For Homework
숙제를 간략하게 하기 위해서 다음 predicate 만을 at
omic 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 18
KU NLPKU NLP
For Homework
(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 19
KU NLPKU NLP
Recursion Templates
Recursion template A few standard forms of recursive Lisp functions. You can create new functions by choosing a template and filling in t
he 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 20
KU NLPKU NLP
Double-Test Tail Recursion
Template :(DEFUN func (X) (CON
D (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 : NILEnd-test-2 : (ODDP(FIRST X))E nd-value-2 : TReduced-x : (REST X)
(defun anyoddp (x) (cond ((null x) nil) ((oddp (first x)) t) ((t (anyoddp (rest x))))
Artificial Intelligence 21
KU NLPKU NLP
Single-Test Tail Recursion
Template :(DEFUN func (X) (CO
ND (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 22
KU NLPKU NLP
Single-Test Augmenting Recursion(1/2)
Template :(DEFUN func (X) (CO
ND (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 23
KU NLPKU NLP
Single-Test Augmenting Recursion(2/2)
Example2: The Factorial Function
(defun fact (n)
(cond ((zerop n) 1)
(t (* n (fact (- n 1))))))
Artificial Intelligence 24
KU NLPKU NLP
List-Consing Recursion(A Special Case of Augmenting Recursion)
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 25
KU NLPKU NLP
Simultaneous Recursion on Several Variables(Using the Single-Test Recursion Template)
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 26
KU NLPKU NLP
Conditional Augmentation (1/2)
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 27
KU NLPKU NLP
Conditional Augmentation (2/2)
(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 28
KU NLPKU NLP
Multiple Recursion(1/2)
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 29
KU NLPKU NLP
Multiple Recursion(2/2)
(defun fib (n)
(cond (equal n 0) 1)
(equal n 1) 1)
(t (+ (fib (- n 1))
(fib (- n 2))))))
Artificial Intelligence 30
KU NLPKU NLP
CAR/CDR Recursion(A Special Case of Multiple Recursion)(1/2)
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 31
KU NLPKU NLP
CAR/CDR Recursion(A Special Case of Multiple Recursion)(2/2)
(defun find-number (x)
(cond ((numberp x) x)
((atom x) nil)
(t (or (find-number (car x))
(find-number (cdr x))))))
Artificial Intelligence 32
KU NLPKU NLP
연습문제
VECTORPLUS X Y: Write a function (VECTORPLUS X Y) which takes two lists an
d 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))))))