DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(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