1  ; exercise chapter 4
  2  ; little lisper
  3  ; july 29 2005
  4
  5  ;=============================================================================
  6  ; duplicate
  7  ;=============================================================================
  8
  9  (defun duplicate (num obj)
 10    (cond
 11     ((zerop num) (quote()))
 12     (t (cons obj (duplicate (1- num) obj)))
 13    )
 14  )
 15
 16  (duplicate 3 (list 'x 'y))
 17  (duplicate 0 ())
 18  (duplicate 1 (list 1 2))
 19
 20  ;=============================================================================
 21  ; multivec
 22  ;=============================================================================
 23  (defun multivec (vec)
 24    (cond
 25     ((null vec) 1)
 26     (t (* (car vec) (multivec (cdr vec))))
 27    )
 28  )
 29
 30  (multivec (list 3 2 4))
 31  (multivec (list 2 1 3))
 32  (multivec (list 1))
 33
 34  ;=============================================================================
 35  ; index
 36  ;=============================================================================
 37  (defun index (obj lat)
 38    (cond
 39     ((null lat) -1)
 40     ((eq obj (car lat)) 1)
 41     (t (1+ (index obj (cdr lat))))
 42    )
 43  )
 44
 45  (index 'car (list 'cons 'cdr 'car 'null? 'eq?))
 46  (index 'car (list 'car 'engine 'auto 'motor))
 47  (index 'motor (list 'car 'engine 'auto 'motor))
 48
 49  ;=============================================================================
 50  ; product
 51  ;=============================================================================
 52  (defun product (vec1 vec2)
 53    (cond
 54     ((null vec1) vec2)
 55     ((null vec2) vec1)
 56     (t (cons (* (car vec1) (car vec2)) (product (cdr vec1) (cdr vec2))))
 57    )
 58  )
 59
 60  (product (list 1 2) (list 3 2 4))
 61  (product (list 3 2 4) (list 2 1 3))
 62  (product (list 2 1 3) (list 6 2 1))
 63
 64  ;=============================================================================
 65  ; dot-product
 66  ;=============================================================================
 67  (defun dot-product (vec1 vec2)
 68    (cond
 69     ((null vec1) 0) ; no need to check for vec2 since they are the same length
 70     (t (+ (* (car vec1) (car vec2)) (dot-product (cdr vec1) (cdr vec2))))
 71    )
 72  )
 73
 74  (dot-product (list 3 2 4) (list 3 2 4))
 75  (dot-product (list 3 2 4) (list 6 2 1))
 76  (dot-product (list 2 1 3) (list 6 2 1))
 77
 78  ;=============================================================================
 79  ; divide
 80  ;=============================================================================
 81  (defun divide (number divisor)
 82    (cond
 83     ((< number divisor) 0)
 84     (t (1+ (divide (- number divisor) divisor)))
 85    )
 86  )
 87
 88  (divide 7 5)
 89  (divide 8 2)
 90  (divide 2 3)
 91
 92  ;=============================================================================
 93  ; ltoe (greater than or equal)
 94  ;=============================================================================
 95  (defun ltoe (num1 num2)
 96    (cond
 97     ((eq num1 num2) t)
 98     ((zerop num2) nil)
 99     ((zerop num1) t)
100     (t (ltoe (1- num1) (1- num2)))
101    )
102  )
103
104  (ltoe 0 1)
105  (ltoe 1 1)
106  (ltoe 3 1)