Hook usage is shown by some examples in this section. First, we will define a hook of arity 2 — that is, the procedures stored in the hook will have to accept two arguments.
(define hook (make-hook 2)) hook ⇒ #<hook 2 40286c90>
Now we are ready to add some procedures to the newly created hook with
add-hook!
. In the following example, two procedures are added,
which print different messages and do different things with their
arguments.
(add-hook! hook (lambda (x y) (display "Foo: ") (display (+ x y)) (newline))) (add-hook! hook (lambda (x y) (display "Bar: ") (display (* x y)) (newline)))
Once the procedures have been added, we can invoke the hook using
run-hook
.
(run-hook hook 3 4) -| Bar: 12 -| Foo: 7
Note that the procedures are called in the reverse of the order with
which they were added. This is because the default behavior of
add-hook!
is to add its procedure to the front of the
hook’s procedure list. You can force add-hook!
to add its
procedure to the end of the list instead by providing a third
#t
argument on the second call to add-hook!
.
(add-hook! hook (lambda (x y)
(display "Foo: ")
(display (+ x y))
(newline)))
(add-hook! hook (lambda (x y)
(display "Bar: ")
(display (* x y))
(newline))
#t) ; <- Change here!
(run-hook hook 3 4)
-| Foo: 7
-| Bar: 12