Next: , Previous: Continuations, Up: Procedures


12.5 Application Hooks

Application hooks are objects that can be applied like procedures. Each application hook has two parts: a procedure that specifies what to do when the application hook is applied, and an arbitrary object, called extra. Often the procedure uses the extra object to determine what to do.

There are two kinds of application hooks, which differ in what arguments are passed to the procedure. When an apply hook is applied, the procedure is passed exactly the same arguments that were passed to the apply hook. When an entity is applied, the entity itself is passed as the first argument, followed by the other arguments that were passed to the entity.

Both apply hooks and entities satisfy the predicate procedure?. Each satisfies either compiled-procedure?, compound-procedure?, or primitive-procedure?, depending on its procedure component. An apply hook is considered to accept the same number of arguments as its procedure, while an entity is considered to accept one less argument than its procedure.

— procedure: make-apply-hook procedure object

Returns a newly allocated apply hook with a procedure component of procedure and an extra component of object.

— procedure: apply-hook? object

Returns #t if object is an apply hook; otherwise returns #f.

— procedure: apply-hook-procedure apply-hook

Returns the procedure component of apply-hook.

— procedure: set-apply-hook-procedure! apply-hook procedure

Changes the procedure component of apply-hook to be procedure. Returns an unspecified value.

— procedure: apply-hook-extra apply-hook

Returns the extra component of apply-hook.

— procedure: set-apply-hook-extra! apply-hook object

Changes the extra component of apply-hook to be object. Returns an unspecified value.

— procedure: make-entity procedure object

Returns a newly allocated entity with a procedure component of procedure and an extra component of object.

— procedure: entity? object

Returns #t if object is an entity; otherwise returns #f.

— procedure: entity-procedure entity

Returns the procedure component of entity.

— procedure: set-entity-procedure! entity procedure

Changes the procedure component of entity to be procedure. Returns an unspecified value.

— procedure: entity-extra entity

Returns the extra component of entity.

— procedure: set-entity-extra! entity object

Changes the extra component of entity to be object. Returns an unspecified value.