;;; Sample solutions to Assignment #2 ;;; ;;; CS 152-05 Programming Language Paradigms ;;; Spring 2014 ;;; Ron Mak ;;; Department of Computer Science ;;; San Jose State University (define member? (lambda (item lst) (cond ((null? lst) #f) ((equal? item (car lst)) #t) (else (member? item (cdr lst))) ))) (define unique (lambda (lst) (cond ((null? lst) '()) ((not (member? (car lst) (cdr lst))) (cons (car lst) (unique (cdr lst)))) (else (unique (cdr lst))) ))) ;;; 1 (define nest (lambda (n) (if (= n 0) '() (list (nest (- n 1))) ))) ;;; 2 (define alternate (lambda (lst) (cond ((null? lst) '()) ((or (null? (cdr lst)) (null? (cddr lst))) (list (car lst))) (else (cons (car lst) (alternate (cddr lst)))) ))) ;;; 3 (define all-same? (lambda (lst) (cond ((null? lst) #t) ((null? (cdr lst)) #t) ((equal? (car lst) (cadr lst)) (all-same? (cdr lst))) (else #f)) )) ;;; 4 (define remove-leading (lambda (item lst) (cond ((null? lst) '()) ((equal? item (car lst)) lst) (else (remove-leading item (cdr lst))) ))) ;;; 5 (define subst-first (lambda (new old lst) (cond ((null? lst) '()) ((equal? old (car lst)) (cons new (cdr lst))) (else (cons (car lst) (subst-first new old (cdr lst))))) )) ;;; 6 (define translate (lambda (word dictionary) (cond ((null? dictionary) '()) ((equal? word (caar dictionary)) (cadar dictionary)) (else (translate word (cdr dictionary))) ))) ;;; 7 (define sandwich-first (lambda (a b lst) (cond ((null? lst) '()) ((null? (cdr lst)) lst) ((and (equal? b (car lst)) (equal? b (cadr lst))) (append (list b a b) (cddr lst))) (else (cons (car lst) (sandwich-first a b (cdr lst))))) )) ;;; 8 (define count (lambda (item lst) (cond ((null? lst) 0) ((equal? item (car lst)) (+ 1 (count item (cdr lst)))) ((pair? (car lst)) (+ (count item (car lst)) (count item (cdr lst)))) (else (count item (cdr lst))) ))) ;;; 9 (define union (lambda (lst1 lst2) (unique (append lst1 lst2)) )) ;;; 10 (define intersect (lambda (lst1 lst2) (reverse (intersect-helper lst1 lst2 '())) )) (define intersect-helper (lambda (lst1 lst2 inter) (cond ((null? lst1) inter) ((and (member? (car lst1) lst2) (not (member? (car lst1) inter))) (intersect-helper (cdr lst1) lst2 (cons (car lst1) inter))) (else (intersect-helper (cdr lst1) lst2 inter)) )))