(define-splat (name arg1 arg2 ... argn)
(local-vars (var1 value1)
(var2 value2)
...
(varn valuen))
(preconditions . body)
(initializer . body)
(finalizer . body)
(wait-for fluent-list . body)
(event-handler
(event predicate)
(action action)
(method context . body))
The wait-for, event-handler, and method forms can be repeated as necessary to describe all of the relevant parts. Any of the parts except the initial (name . args) binding form can be omitted, and parts can appear in any order.