#lang racket ; CS 251: programs as data in Racket (define (is-addition? e) (eq? (car e) '+)) ; Return #t if the quoted expression e ; contains an addition expression at ; the top level or as a subexpression. (define (contains-addition? e) (cond [(null? e) #f] [(cons? e) (or (contains-addition? (car e)) (contains-addition? (cdr e)))] [(eq? '+ e) #t] [#t #f])) (define (contains-addition? e) (cond [(null? e) #f] [(and (cons? e) (eq? (car e) '+)) #t] [(cons? e) (or (contains-addition? (car e)) (contains-addition? (cdr e)))] [#t #f])) ; Create a new quoted expression just like e, ; except that all occurences of varx (some ; symbol) are replace with vary (another symbol). ; Think carefully about shadowing... (define (subst varx vary e) e)