(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)))