(guile.info.gz) Hook Example
Info Catalog
(guile.info.gz) Hooks
(guile.info.gz) Hook Reference
24.6.1 Hook Usage by Example
----------------------------
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 behaviour 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
Info Catalog
(guile.info.gz) Hooks
(guile.info.gz) Hook Reference
automatically generated byinfo2html