Lecture 1 - Suraj @ LUMS

Download Report

Transcript Lecture 1 - Suraj @ LUMS

LISP
• Symbolic Expressions (S Expressions)
Syntax:
• Opening and Closing parenthesis having elements in
between.
List represented in LISP:
• (A B2 C3 Shahid)
• (A B (C D E) F G)
Internal Representation
nil
B2
A
C3
Shahid
nil
A
F
B
D
C
G
E
nil
Functional Programming
Defining Functions:
Syntax:
( defun{Function Name}
(
{parameters}
{procedure or body of the function}
)
)
Setting Values to variables:
(setq A 2) or (set ‘A 2)
Arithmetic Operations
(+ A B) means A+B
(* 7 7) means 7*7=49
(- C D) means C-D
(- (+10 20) 7) means ((10+20)- 7 = 23
Tree Diagram for Evaluation
( + (* 10 20) (* 2 3))
+
(* 10 20)
(* 2 3)
*
*
10
20
2
3
Built In Commands
• Quote: returns the list as it is.
– (quote(a b c)) or use ‘ instead of quote.
– Returns (a b c)
• List: load the argument as a list
– (list(1 2 3 4))
– Returns (1 2 3 4)
• Eval: evaluates the list or quoted list.
– (eval ( quote (+ 2 3)))
– Returns 5
– ( quote (+ 2 3))
– Returns (+2 3)
• Nth n: returns the nth value of the list
– (nth 0 (1 2 3 4 5 6)) returns 1
– (nth 3 (1 2 3 4 5 6)) returns 4
– (nth 5 (1 2 3 4 5 6)) returns 6
Examples
(= (+ 5 1 ) 6 )
returns t
( > (* 5 6) (+ 4 5))
returns t
Other List Operators
(length ‘(1 2 3 4))
returns 4
(member 8 ‘(1 4 2 8 7))
returns t and if not present then returns nil
(null ())
returns t
Assignments Statements
• (setq a=0)
returns 0
• (let ((a 3) b)
; local assignment
(setq b 4)
;if you go outside let a goes to 0
(+ a b))
7
• a
0
• b
error b not bounded at the top level
Sample Programme
Programme to add three numbers:
( defun ADDNUMBERS (num1 num2 num3)
(setq sum 0); initialise the sum to zero
(setq sum ( + sum num1); add first number
(setq sum ( + sum num2));
(setq sum ( + sum num3))
);
Conditionals
Command ‘cond’
Syntax:
( cond (<condition 1><action 1>)
(<condition 2><action 2>)
----------------------------------------------(<condition n><action n>)
)
Example
( defun absolute_values(x)
(cond ( ( < x 0) (-x));
(t x)))
This programme returns the value of x as it is
if x>0 otherwise returns -x
List Manipulation
• Command ‘cons’
(cons ‘a ‘(b c)) returns (a b c)
• Command ‘append’ does the same operation as
cons
• Command ‘car’
Returns the first element of the list
• Command ‘cdr’
Returns the list excluding the first element
Examples
• (cdr ‘((a b) (c d)))
– returns ((c d))
• (car (cdr (car list1)))
ca d ar
• (car (car(x))
• (car(car(car x)))
• (cdr(car(cdr x)))
(cadar x)
(caar x)
(caaar x)
(cdadr x)
Recursion
• Write a programme that finds the factorial of a
number
Syntax: (defun factorial(x)
----------------(recursive call))
recursive call:
(* x ( factorial ( - x 1) ) )
?