CSC 330 Lecture Notes Week 8
Introduction to Functional Programming and Lisp
(defun APlusB (a b) (+ a b) )
int APlusB(int a,b) { return a + b; }
Lisp Form | PCJ Form | Remarks |
(+ a b) | a + b | Call the built-in addition function |
(APlusB 10 20) | APlusB(10, 20) | Call the user-defined function APlusB |
(cond ( (test-expression1) (expression11) ... (expression1j) ) ) . . . ( (test-expressionn) (expressionn1) ... (expressionnk) )
Operation | Meaning |
car | return the first element of a list |
cdr | return everything except the first element of a list |
cons | construct a new list, given an atom and another list |
(defun f (x) ... ) (defun a (x) ...)
(f (a b))
(f '(a b))
(defun avg (l) (/ (sum l) (length l)) )
(defun sum (l) (cond ((null l) 0) (t (+ (car l) (sum (cdr l)))) ) )
(defun main () (avg '(1 2 3 4 5)) )
int avg(int l[], int length) { int i, sum; for (i=0, sum=0; i<length; i++) sum += l[i]; return sum/length; }
main() { int l[] = {1,2,3,4,5}; printf("%d\n", avg(l, 5)); }
int sum(list l) { if (null(l)) /* if the list l is empty */ return 0; /* then return 0 as the summing result */ else /* otherwise, */ return car(l) + /* return the sum of the 1st list element plus */ sum(cdr(l); /* the sum of the rest of the elements */
(defun my-nth (n l) (cond ( (< n 0) nil ) ( (eq n 0) (car l) ) ( t (my-nth (- n 1) (cdr l)) ) ) )