1 ; exercise chapter 3 2 ; little lisper 3 ; july 24 2005 4 5 ;============================================================================= 6 ; seconds 7 ;============================================================================= 8 (defun seconds (list) 9 (cond 10 ((null list) (quote())) 11 (t (cons (car (cdr (car list))) (doubles (cdr list)))) 12 ) 13 ) 14 15 (seconds (list (list 'paella 'spanish) (list 'wine 'red) (list 'and 'beans))) 16 17 ;============================================================================= 18 ; dupla 19 ;============================================================================= 20 (defun dupla (word list) 21 (cond 22 ((null list) (quote())) 23 (t (cons word (dupla word (cdr list)))) 24 ) 25 ) 26 27 (dupla 'hot (list 'a 'b 'c 'd)) 28 (dupla 'hot ()) 29 30 ;============================================================================= 31 ; double 32 ;============================================================================= 33 (defun double (word list) 34 (cond 35 ((null list) (quote())) 36 ((eq word (car list)) (cons word list)) 37 (t (cons (car list) (double word (cdr list)))) 38 ) 39 ) 40 41 (double 'chili (list 'texas 'hot 'chili)) 42 (double 'chili (list 'chili 'texas' hot)) 43 44 ;============================================================================= 45 ; subst-sauce 46 ;============================================================================= 47 (defun subst-sauce (word list) 48 (cond 49 ((null list) (quote())) 50 ((eq 'sauce (car list)) (cons word (cdr list))) 51 (t (cons (car list) (subst-sauce word (cdr list)))) 52 ) 53 ) 54 55 (subst-sauce 'chili (list 'texas 'hot 'chili)) 56 (subst-sauce 'chili (list 'soy 'sauce 'and 'tomato 'sauce)) 57 58 ;============================================================================= 59 ; subst3 60 ;============================================================================= 61 (defun subst3 (new word1 word2 word3 list) 62 (cond 63 ((null list) (quote())) 64 ; if any of these conditions are true 65 ((or (eq word1 (car list)) (or (eq word2 (car list)) (eq word3 (car list)))) 66 (cons new (cdr list))) 67 (t (cons (car list) (subst3 new word1 word2 word3 (cdr list)))) 68 ) 69 ) 70 71 (subst3 'soy 'chili 'hot 'sauce (list 'soy 'sauce 'and 'tomate 'sauce)) 72 (subst3 'sauce 'chili 'hot 'spicy (list 'texas 'hot 'chili)) 73 (subst3 'spicy 'chili 'hot 'soy '()) 74 75 ;============================================================================= 76 ; substN -very fun! 77 ;============================================================================= 78 79 (defun substN (new slat lat) 80 (cond 81 ((null slat) (quote())) 82 ((null lat) (quote())) 83 ((eq (car lat) (car slat)) (cons new (cdr lat))) 84 ((null (cdr slat)) (cons (car lat) (substN new slat (cdr lat)))) 85 (t (substN new (cdr slat) lat)) 86 ) 87 ) 88 89 (substN 'hot (list 'cincinnati 'chili) (list 'texas 'hot 'chili)) 90 (substN 'sauce (list 'cincinnati 'chili) (list 'soy 'sauce 'and 'tomato 'sauce)) 91 (substN 'shit (list 'soy 'sauce 'and 'tomato 'sauce) (list 'texas 'hot 'sauce)) 92 (substN 'sauce (list 'cincinnati 'chili) ()) 93 94 ;============================================================================= 95 ; rember2 96 ;============================================================================= 97 98 ; needs rember first 99 (defun rember (word list) 100 (cond 101 ((null list) (quote())) 102 ((eq word (car list)) (cdr list)) 103 (t (cons (car list) (rember word (cdr list)))) 104 ) 105 ) 106 107 (defun rember2 (word list) 108 (cond 109 ((null list) (quote ())) 110 ((eq word (car list)) (cons word (rember word (cdr list)))) 111 (t (cons (car list) (rember2 word (cdr list)))) 112 ) 113 ) 114 115 (rember2 'chili (list 'cincinati 'chili)) 116 (rember2 'sauce (list 'soy 'sauce 'and 'tomato 'sauce 'more 'sauce)) 117 (rember2 'sauce ())