;; CS334 Lecture 2 Examples

;; Factorial

(defun factorial (n)
  (if (eq n 0) 1                ;; base case
    (* n (factorial (- n 1))))) ;; recursive

(factorial 2)
(factorial 10)

;; Contains

(defun contains (x l)
  (cond ((eq l nil)     nil)
	((eq (car l) x) t)
	(t (contains x (cdr l)))))

(contains 1 '(0 1 2 3 4))
(contains 5 '(0 1 2 3 4))


;; Insertion Sort

(defun insert (x l)
  (cond ((eq l nil)    (cons x nil)) ;; empty base case
	((< x (car l)) (cons x l))   ;; x is smallest base case
	(t (cons (car l) (insert x (cdr l))))))

(insert 4 nil)
(insert 4 '(10))
(insert 4 '(1 3 5))  ;; ==> (1 3 4 5)

(defun insert-sort (l)
  (if (eq l nil) nil
      (insert (car l) (insert-sort (cdr l)))))

(insert-sort '(5 2 4 581 2 4 1 98))