(define (make-add-func x) (local ((define (x-adder y) (+ x y))) x-adder)) (define add5 (make-add-func 5)) (add5 10) (add5 20) (define (filter-creator rel-op) (local ((define (filter1 alon t) (cond [(empty? alon) empty] [else (cond [(rel-op (first alon) t) (cons (first alon) (filter1 (rest alon) t))] [else (filter1 (rest alon) t)])]))) filter1)) ;; (define above (filter-creator > )) (above '(1 7 9 27 56 19) 20) ;; (define below (filter-creator < )) (below '(1 7 9 27 56 19) 20) ;; ;; function that creates functions that access the nth element in a list ;; (define (nth-creator n) (local ((define (f alist) (local ((define (f-helper l x) (cond [(= 1 x) (first l)] [ else (f-helper (rest l) (- x 1))]))) (f-helper alist n)))) f)) (define twelveth (nth-creator 12)) (twelveth '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) ;; ========================================================== ;; GUI code (requires gui.ss teachpack) ;; ;; sample components (for screengrabs to put in slides) ; (create-window (list (list (make-text "Enter your name:")))) ; (create-window (list (list (make-message "Welcome to my gui")))) ; (create-window (list (list (make-button "Press Me" hide-window)))) ; (create-window ; (list ; (list (make-message "Welcome to my gui") ; (make-button "Press Me" hide-window)) ; (list (make-text "Enter your name:")))) ;; define some GUI items we will use ;; x and y are textboxes (define x (make-text "X=")) (define y (make-text "Y=")) ;; answer is a message (where we draw the answer) (define answer (make-message "---")) ;; mult is called when the user clicks on the * button (define (mult e) (draw-message answer (number->string (* (string->number (text-contents x)) (string->number (text-contents y)))))) ;; add is called when the user clicks on the + button (define (add e) (draw-message answer (number->string (+ (string->number (text-contents x)) (string->number (text-contents y)))))) ; (create-window ; (list ; (list x) ; (list y) ; (list (make-button " * " mult) ; (make-button " + " add)) ; (list (make-message "Answer: ") answer))) ;; better solution - makes it easier to add new buttons that ;; apply some operator to x and y (define (make-button-handler op) (local ((define (f e) (draw-message answer (number->string (op (string->number (text-contents x)) (string->number (text-contents y))))))) f)) (create-window (list (list x) (list y) (list (make-button " * " (make-button-handler *)) (make-button " + " (make-button-handler +)) (make-button " - " (make-button-handler -)) (make-button " / " (make-button-handler /))) (list (make-message "Answer: ") answer)))