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)