[Top] | [Contents] | [Index] | [ ? ] |
This is the cram-language Reference Manual, generated automatically by Declt version 2.0 patchlevel 1 "Benjamin Sisko" on Mon Feb 01 17:49:04 2016 GMT+1.
1. Systems | The systems documentation | |
2. Modules | The modules documentation | |
3. Files | The files documentation | |
4. Packages | The packages documentation | |
5. Definitions | The symbols documentation | |
A. Indexes | Concepts, functions, variables and data types |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The main system appears first, followed by any subsystem dependency.
1.1 cram-language |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Lorenz Moesenlechner <moesenle@cs.tum.edu>
Lorenz Moesenlechner <moesenle@cs.tum.edu>
BSD
Coginitive plan language
cram-language is a new plan language.
cram-language.asd (Lisp file)
src (module)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Modules are listed depth-first from the system components tree.
2.1 src/ | ||
2.2 src/tasks/ | ||
2.3 src/fluents/ | ||
2.4 src/walker/ |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
cram-language (system)
src/
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/tasks/
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/fluents/
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
packages (Lisp file)
src (module)
src/walker/
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Files are sorted by type and then listed depth-first from the systems components trees.
3.1 Lisp |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
cram-language.asd
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/packages.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
packages (Lisp file)
src (module)
src/utils.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/task-interface.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
packages (Lisp file)
src (module)
src/fluent-interface.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/logging.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
packages (Lisp file)
src (module)
src/with-policy.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/default-policies.lisp
timeout-policy (special variable)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
tasks (module)
src/tasks/failures.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
failures (Lisp file)
tasks (module)
src/tasks/task.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
task (Lisp file)
tasks (module)
src/tasks/task-tree.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fluents (module)
src/fluents/fluent.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fluent (Lisp file)
fluents (module)
src/fluents/value-fluent.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fluent (Lisp file)
fluents (module)
src/fluents/fluent-net.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fluent (Lisp file)
fluents (module)
src/fluents/pulse-fluent.lisp
pulse-fluent (class)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
walker (module)
src/walker/env.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
env-impl-specific (Lisp file)
walker (module)
src/walker/plan-tree.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
plan-tree (Lisp file)
walker (module)
src/walker/walker.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
walker (Lisp file)
walker (module)
src/walker/interface.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/language.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/plans.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/goals.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/fluent-operators.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
src (module)
src/sbcl-hotpatches.lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Packages are listed by definition order.
4.1 cram-user | ||
4.2 cram-language | ||
4.3 cram-language-implementation | ||
4.4 cram-walker |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
packages (Lisp file)
cpl-user
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Main package of a new planning language similar to RPL.
packages (Lisp file)
cpl
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Internal implementation package of CPL.
packages (Lisp file)
cpl-impl
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
A fairly basic code walker for use in CPL for expanding plans.
packages (Lisp file)
walker
common-lisp
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Definitions are sorted by export status, category, package, and then by lexicographic order.
5.1 Exported definitions | ||
5.2 Internal definitions |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
5.1.1 Special variables | ||
5.1.2 Macros | ||
5.1.3 Functions | ||
5.1.4 Generic functions | ||
5.1.5 Conditions | ||
5.1.6 Structures | ||
5.1.7 Classes | ||
5.1.8 Types |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Like *BREAK-ON-SIGNALS*, but for plan failures.
failures (Lisp file)
Contains the current path (in reverse order).
task-interface (Lisp file)
Dynamically bound current task.
task-interface (Lisp file)
Indicates if the debugger should be entered at the location where a
common lisp error is raised.
failures (Lisp file)
Where should logging output go to?
logging (Lisp file)
Value for *PRINT-RIGHT-MARGIN* when printing log entries.
Good values between 120 - 150, depending on your window width.
logging (Lisp file)
When t, every task to be executed is pushed to *tasks*.
task (Lisp file)
Verbosity level for how TASK objects are printed.
A value of 0 means that no information is printed that may depend
on a lock.
task-interface (Lisp file)
The task tree of the current top-level plan.
task (Lisp file)
task (Lisp file)
task-interface (Lisp file)
task-interface (Lisp file)
task-interface (Lisp file)
logging (Lisp file)
logging (Lisp file)
logging (Lisp file)
logging (Lisp file)
logging (Lisp file)
default-policies (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Declares the goal ‘name’. Before matching goals defined with
‘def-goal’ are executed, ‘body’ is executed with ‘pattern’ lexically
bound to the parameter specified when the goal was called. ‘body’ is
executed in an unnamed block that allows for suppressing the execution
of any goal. The idea behind that is that ‘body’ can verify if the
goal already holds and suppress execution of any code.
goals (Lisp file)
Defines a global variable (like DEFPARAMETER) that is implemented as a
fluent. You can access it like a lisp variable with "NAME", and also setf
it like a lisp variable "(SETF NAME)" - note there is no need for
"(VALUE NAME)". However the variable being implemented as a fluent means
that the access is implicitely synchronized with a lock, and all changes
are traced if fluent tracing is enabled.
You cannot directly access the implementing fluent which means that you
cannot use it for building fluent nets or in cpl-constructs like
WHENEVER. (Just use a normal variable containing a fluent for those
purposes).
You can use this for example for defining global datastructures that need not participate directly in cpl constructs, but should be traced in the execution trace and/or accessed by multiple tasks/threads simultaniously.
value-fluent (Lisp file)
Defines a cram function. All functions that should appear in the
task-tree must be defined with def-cram-function.
CAVEAT: See docstring of def-top-level-cram-function.
plans (Lisp file)
Defines a new goal. Goals always have the form
(<name> [pattern]*)
where patterns can be arbitrary expressions containing
variables (indicated by a ?-prefix) and symbols.
Example: (achieve (loc ?obj ?location)) When defining goals with
similar expressions (e.g. (loc Robot ?l) and (loc ?a ?b)) the most
specific expression must be defined first. Otherwise, the previously
defined expression will be overwritten.
In the lexical environment of ‘body’, the function (SUCCEED [values])
is defined which performs a non-local exit, returning ‘values’ as
return values.
goals (Lisp file)
plans (Lisp file)
Defines a top-level cram function. Every top-level function has its
own episode-knowledge and task-tree.
CAVEAT: Don’t have surrounding FLET / LABLES / MACROLET /
SYMBOL-MACROLET / LET / etc when using DEF-TOP-LEVEL-CRAM-FUNCTION
or DEF-CRAM-FUNCTION (unless you really know what you are
doing). They could mess with (WITH-TAGS ...) or shadow globally
defined plans, which would not be picked up by WITH-TAGS /
EXPAND-PLAN. See the comment before the definition of WITH-TAGS for
more details.
plans (Lisp file)
plans (Lisp file)
This macro implicitly calls ‘make-policy’, and pushes the generated
policy onto the list of defined policies, thus making it accessible to
‘named-policy’ and ‘with-named-policy’ by its name. The usage is the
same as for ‘make-policy’:
> (define-policy policy-1 (param-1 param-2)
"The documentation string for this policy"
(:init (do-initialization-here))
(:check (do-checking-here))
(:recover (do-recovering-here))
(:clean-up (do-cleaning-up-here)))
with-policy (Lisp file)
Define a binding for ‘name’ as a special variable, and in
particular as a task variable.
‘global-value’ is the variable’s global value; if not given, the
variable is unbound. ‘docstring’ is its documentation string. ‘type’
is, optionally, its globally proclaimed type.
A task variable is a binding that is established and initialized right
before execution of a task. The binding is task-local, meaning that
assignment to it won’t affect the variable’s global binding, or
bindings within other tasks.
The initialization is performed by ‘init-function’ which must be a
function of three parameters: the TASK object going to be executed,
the TASK object of the parent task, and the previous value of ‘name’
in the parent. In case the task object is a TOPLEVEL-TASK, the second
argument will be NIL, and the third one will be the global value.
Task variables can hence be used for different purposes:
1. to initialize a variable based on the task object to be
executed.
2. to initialize a variable based on the task’s parent.
3. to inherit a task variable’s value from its parent.
In case ‘init-function’ is not given, the default behaviour is the
behaviour of the 3rd item.
task-interface (Lisp file)
Logs an event specified by ‘clauses’ to *LOG-OUTPUT*.
Syntax:
clauses ::= (:CONTEXT fmt-ctrl . fmt-args)
| (:DISPLAY fmt-ctrl . fmt-args)
| (:TAGS tag+)
A log entry will look like
<realtime> , <runtime> - <current task> > <context> ; <display>
Where
<realtime> denotes a timestamp relative to *ZERO-REAL-TIME*,
<runtime> denotes a timestamp relative to *ZERO-RUN-TIME*,
<current task> denotes the name of the currently active task,
<context> denotes the result of the format-control ‘fmt-ctrl’
applied to the format-arguments ‘fmt-args’ of the
given :CONTEXT clause,
<display> ditto but for the :DISPLAY clause.
The :TAGS clause specifies the log tags that must be active for
this LOG-EVENT to emit any output.
It is hence possible to specify the degree of logging in a very
fine-grained way: log tags can be dynamically enabled by
LOG-ENABLE, disabled by LOG-DISABLE, and set by LOG-SET.
Most defined log tags correspond to constructs of cpl or the underlying
implementation. Use the :debug tag for adding (temporary) debug messages.
For convenience, the following constants are defined to enable a
bunch of tags at once:
+LOG-ALL+ - set of all available tags
+LOG-DEFAULT+ - a predefined default set
+LOG-VERBOSE+ - +LOG-DEFAULT+ + more
+LOG-VERY-VERBOSE+ - +LOG-VERBOSE+ + even more
+LOG-LANGUAGE+ - set of all CRAM language constructs.
See also
LIST-AVAILABLE-LOG-TAGS
LIST-ACTIVE-LOG-TAGS
DEFINE-LOG-TAGS
*LOG-RIGHT-MARGIN*
logging (Lisp file)
Is any tag in ‘tags’ active at the moment?
logging (Lisp file)
Generates a policy based on the information supplied. ‘name’
specifies an internal name for the policy, to be used with
‘named-policy’, or ‘with-named-policy’. ‘parameters’ is a list of
parameter symbols to be used by code inside the policy. Every time, a
piece of code inside the policy is executed, these parameters (with
assigned values from the ‘with-policy’, or ‘with-named-policy’ call)
are passed to the code segments. The ‘properties’ variable holds a
list of labelled code segments for execution during certain phases. An
example would look like this:
> (make-policy policy-1 (param-1 param-2)
"The documentation string for this policy"
(:init (do-initialization-here))
(:check (do-checking-here))
(:recover (do-recovering-here))
(:clean-up (do-cleaning-up-here)))
This returns a policy object to be used with ‘with-policy’. For
further information about when each function block is executed, see
‘with-policy’. The semantics of the ‘properties’ variable are like
this:
- Forms given via ‘:init’ are executed exactly once, when the policy
is initialized for usage. In case this function returns ‘nil’,
execution of the ‘body’ code is not started, none of the other
policy code blocks are executed, and a failure of type
‘policy-init-failed’ is thrown.
- A function given under the label ‘:check’ is executed every time
‘with-policy’ checks if the policy condition is met or not. If this
function returns ‘t’, the condition is met, the ‘:recover’ function
block is executed, and the execution of both, the policy, and the
wrapped body code of ‘with-policy’ is stopped.
- Either when the policy (due to a met policy condition), or the
wrapped body of ‘with-policy’ code stopped execution of the current
code block, the ‘:clean-up’ function block is executed to perform
clean-up procedures.
with-policy (Lisp file)
Automatically removes all ‘NIL’ entries from a generated list after
performing a ‘mapcar’.
utils (Lisp file)
Executes ‘when-suspended-form’ whenever a suspension event occurs
while ‘form’ is being executed.
Non local exits out of ‘when-suspended-form’ are prohibited.
task-interface (Lisp file)
Executes forms in parallel. Fails if one fails. Succeeds if all
succeed.
language (Lisp file)
Executes body in parallel for each ‘var’ in ‘sequence’.
language (Lisp file)
Specify ordering constraints for ‘steps’. ‘steps’ are executed in
an implicit PAR form. ‘orderings’ is a list of orderings. An ordering
always has the form:
(:order <contstraining-task> <constrained-task>)
‘constraining-task’ and ‘constrained-task’ are task objects. That
means, they can be either be defined in the current lexical
environment (over a :tag) or by either using the function TASK to
reference the task by its absolute path or the function SUB-TASK to
reference it by its path relative to the PARTIAL-ORDER form.
language (Lisp file)
Execute forms in parallel. Succeed if one succeeds, fail if one
fails.
language (Lisp file)
Besides the replacement of simple code parts defined with ’with-task-tree-node’,
it is necessary to also pass parameters to the replaceable code
parts. For that, replaceable functions can be defined. They are not
real functions, i.e. they do change any symbol-function or change
the lexical environment. ’name’ is used to mark such functions in
the code-sexp. More specifically, the sexp is built like follows:
‘(replaceable-function ,name ,lambda-list ,@body).
The ’parameters’ parameter contains the values to call the function with.
task-tree (Lisp file)
Execute ‘body’, and return its values.
In case a suspension event occurs during the execution, ‘body’ is
completely unwound, and the suspension takes place _outside_ of
‘body’. After wakeup, ‘body’ is executed again.
The intended use case is to unwind out of critical sections to
ensure that a task won’t suspend while holding on locks.
task-interface (Lisp file)
Executes forms sequentially. Fails if one fail. Succeeds if all
succeed.
language (Lisp file)
Anonymous top-level, e.g. for interactive use. See NAMED-TOP-LEVEL for details.
language (Lisp file)
Try forms in parallel. Succeed if one succeeds, fail if all fail.
In the case of a failure, a condition of type ’composite-failure’
is signaled, containing the list of all error messages and data.
language (Lisp file)
Executes ‘body’ with ‘variable’ bound to each element in ‘list’
sequentially until ‘body’ succeeds, i.e. returns the result of
‘body’ as soon as ‘body’ succeeds and stops iterating.
language (Lisp file)
Execute forms sequentially. Succeed if one succeeds, fail if all fail.
In case of failure, a composite-failure is signaled.
language (Lisp file)
Executes ‘body’ whenever ‘condition-fluent’ is pulsed or non-nil.
The ‘body’ forms are executed in an implicit block named NIL. The
parameter ‘wait-status’ has the same meaning as in WAIT-FOR
fluent (Lisp file)
Macro that replaces handler-case in cram-language. This is
necessary because error handling does not work across multiple
threads. When an error is signaled, it is put into an envelope to
avoid invocation of the debugger multiple times. When handling errors,
this envelope must also be taken into account.
We also need a mechanism to retry since errors can be caused by plan
execution and the environment is highly non-deterministic. Therefore,
it is possible to use the function ‘retry’ that is lexically bound
within with-failure-handling and causes a re-execution of the body.
When an error is unhandled, it is passed up to the next failure
handling form (exactly like handler-bind). Errors are handled by
invoking the retry function or by doing a non-local exit. Note that
with-failure-handling implicitly creates an unnamed block,
i.e. ‘return’ can be used.
failures (Lisp file)
The semantics of ‘with-named-policies’ are the same as for ‘with-policies’, except that instead of policy-objects, policy names are used:
> (with-named-policies
((’my-policy (3 1))
(’my-policy (100 4))
(’my-other-policy ("Test")))
(body-code))
with-policy (Lisp file)
Performs the same as ‘with-policy’, but accepts a policy name
instead of the policy object itself. This calls an implicit
‘named-policy’ to acquire the policy object. Otherwise, it has the
same semantics as ‘with-policy’. Usage:
> (with-named-policy ’policy-name (param-value-1 param-value-2) (body-code))
with-policy (Lisp file)
Allows for running a given ‘body’ code segment wrapped in a list of
policies (together with individual parameters for each of them). The
‘policies-and-parameters-list’ parameter describes a list of policy/parameter-list pairs.
The usage is as follows:
> (with-policies
((my-policy-object (3 1))
(my-policy-object (100 4))
(my-other-policy-object ("Test")))
(body-code))
with-policy (Lisp file)
Wraps the code given as ‘body’ into a ‘pursue’ construct together
with monitoring code supplied by the policy ‘policy’, and given the
parameters ‘policy-parameters’. The ‘policy-parameters’ allow for
custom parameterization of policies. First, the policy is initialized
via the optional ‘:init’ code block. In case this block returns ‘nil’,
execution of the ‘body’ code or other policy-related code blocks is
not started. An exception of type ‘policy-init-failed’ is
thrown. Otherwise, the ‘:check’ code block of the policy is executed
in a loop in parallel to the ‘body’ code. If the ‘:check’ code returns
‘t’, the policy condition is met and the ‘:recover’ code block is
executed. The execution of both, the policy, and the ‘body’ code is
the stopped, and the ‘:clean-up’ policy code is executed. If the
policy condition is never met, ‘body’ finishes and returns
normally.
To clarify the order of code execution here:
- Initialization of policy is executed (‘:init’)
- ‘pursue’ code form is started, with up to two forms inside:
- The policy ‘:check’ code block (if present)
- The ‘body’ code
- ‘:check’ is evaluated continuously, in parallel to the normal
execution of ‘body’. If it returns ‘nil’, nothing happens. In any
other case (i.e. return value is unequal to ‘nil’), the execution of
the ‘body’ code is interrupted, and ‘:check’ is not performed again
anymore. The policy code block given in ‘:recover’ is executed (if
present). This means (explicitly) that the ‘:recover’ code is
performed *after* the ‘body’ code got interrupted.
- If ‘:check’ always returns ‘nil’ until the ‘body’ code execution
finishes, ‘:recover’ is never executed.
- In either case (with or without ‘:recover’), the policy ‘:clean-up’
code is performed (if present).
In each of the phases, ‘policy-setf’ and ‘policy-get’ are
available. They can be used to store variables associated with given
symbols for the course of action of the current policy.
Example:
> (define-policy var-test-policy ()
"Variable Test Policy"
(:init (policy-setf ’some-var 10)
t)
(:check (policy-setf ’some-other-var
(+ (policy-get ’some-var) 2))
nil)
(:clean-up (format t "Variables: ~a ~a~%"
(policy-get ’some-var)
(policy-get ’some-other-var))))
Usage of ‘with-policy’:
> (with-policy policy-object (param-value-1 param-value-2)
(body-code))
with-policy (Lisp file)
Lexically binds all counters in ‘counter-definitions’ to the intial
values specified in ‘counter-definitions’. ‘counter-definitions’ is
similar to ‘let’ forms with the difference that the counters will
not be available under the specified names in the lexical
environment established by this macro. In addition, the macro
defines the local macro (DO-RETRY <counter> <body-form>*) to
decrement the counter and execute code when the maximal retry count
hasn’t been reached yet and the function ‘(RESET-COUNTER
<counter>).
failures (Lisp file)
task-interface (Lisp file)
Execute body with all tags bound to the corresponding lexically
bound variables.
language (Lisp file)
Execute body with ’task’ being suspended.
language (Lisp file)
Executes a body under a specific path. Sexp, lambda-list and parameters are optional.
task-tree (Lisp file)
Execute ‘body’ without periodically entering into a task’s event
loop. This prevents all acting on messages (including suspension,
evaporation, etc.) from other tasks.
task-interface (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fluent-operators (Lisp file)
fluent-operators (Lisp file)
fluent-operators (Lisp file)
fluent-operators (Lisp file)
fluent-operators (Lisp file)
fluent-operators (Lisp file)
fluent-operators (Lisp file)
Removes recursively all tasks from the tree. Keeps tree structure and
leaves code-replacements in place.
task-tree (Lisp file)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf code-function) (function)
task-tree (Lisp file)
code-function (function)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf code-parameters) (function)
task-tree (Lisp file)
code-parameters (function)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf code-sexp) (function)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf code-task) (function)
task-interface (Lisp file)
goals (Lisp file)
fluent-operators (Lisp file)
fluent-operators (Lisp file)
Expand-plan takes a sexp and macroexpands it. Whenever it encounters a call
to a plan it continues by expanding the sexp that defined that plan and
thus builds up a hierarchie of plans (plan-tree). Expand-plan returns two
values: The resulting plan tree and the macroexpansion of form (with calls
to plans still in place) of which the plan tree will be the most
interesting. The root of the plan-tree returned by expand-plan doesn’t
correspond to a plan call, but the form that was passed to expand-plan.
interface (Lisp file)
failures (Lisp file)
Returns a copy of the task tree which contains only nodes that satisfy ‘predicate’. CAVEAT: If a node does not satisfy ‘predicate’ then none of its descendants will appear in the filtered tre, even if they satisfy ‘preidacte’. Assume that the root saisfies ‘predicate’, otherwise there would be no tree to return.
task-tree (Lisp file)
Return the plan-tree-node specified by the path. Returns nil, if the path
is not valid.
plan-tree (Lisp file)
fluent-net (Lisp file)
fluent-net (Lisp file)
fluent-net (Lisp file)
The and-operator for fluents. It is fundamentally different to the
definition of common-lisp’s and in that it is not implemented as a
macro. That means, all args are evaluated when using fl-and.
fluent-net (Lisp file)
fluent-net (Lisp file)
fluent-net (Lisp file)
fluent-net (Lisp file)
Generic fluent-operator. Applys args to function whenever a
fluent in args changes.
fluent-net (Lisp file)
fluent-net (Lisp file)
The or-operator for fluents. For more information on why it is a
function please refere to the documentation of fl-and.
fluent-net (Lisp file)
Returns a fluent whose value becomes T only and only if its parent
fluent has been pulsed. How long it stays T depends on the parameter
‘handle-missed-pulses’. It can be either :NEVER :ONCE or :ALWAYS:
- :NEVER means that missed pulses are ignored, i.e. the initial
value is always NIL and becomes T only when ‘fluent’ gets
pulsed. It stays T only for exactly one call of VALUE, even if
more than one pulse occured since the last call to VALUE.
- :ONCE is similar to :NEVER but has an initial value of T if
‘fluent’ has been pulsed at least once before.
- :ALWAYS means that the VALUE method returns T for exactly the
number of pulses of ‘fluent’.
Please note that the value of a PULSE-FLUENT changes from one call to
another. That means it is not re-entrant, and FL-PULSED should not be
bound to a variable or passed around. This could lead to unwanted
behavior if one thread catches pulses another one was to handle.
pulse-fluent (Lisp file)
Returns a fluent that gets pulsed and has the value T whenever
‘fluent’ changes its value.
fluent-net (Lisp file)
fluent-net (Lisp file)
fluent-net (Lisp file)
fluent-net (Lisp file)
fluent-net (Lisp file)
Returns a list of all the nodes in the tree.
task-tree (Lisp file)
Returns the task tree for a named top level (top level plan).
language (Lisp file)
task-tree (Lisp file)
Returns true if ‘task-tree-node’ is a goal task.
task-tree (Lisp file)
task-tree (Lisp file)
task-tree (Lisp file)
List all log tags active at the moment.
logging (Lisp file)
logging (Lisp file)
task (Lisp file)
Disable each tag in ‘tags’.
Corresponding LOG-EVENTs will cease to emit any output.
logging (Lisp file)
Enable each tag in ‘tags’.
Corresponding LOG-EVENTs will begin to emit output.
logging (Lisp file)
Enable only the tags in ‘tags’, disabling all other tags first.
Corresponding LOG-EVENTs will being / cease to emit output.
logging (Lisp file)
Use this to create fluents. Default class is VALUE-FLUENT.
Pass :ALLOW-TRACING NIL to never trace this fluent (default T).
Pass :MAX-TRACING-FREQ to restrict the frequency with which updates to this fluents are traced. The unit is ’1/second’. Default is NIL (meaning no restriction).
value-fluent (Lisp file)
Returns a runnable task for the path
task-tree (Lisp file)
task-tree (Lisp file)
Returns the policy by the name ‘policy-name’ from the list of
defined policies. If the policy by this name is not in the list, the
‘policy-not-found’ condition is signalled. Usage:
> (named-policy ’policy-name)
with-policy (Lisp file)
fluent-operators (Lisp file)
Return the same value as VALUE, except that this never changes the state of the flunet. E.g. for PULSE-FLUENT the internal counter is not incremented.
fluent (Lisp file)
Return whether debug-block represents elsewhere code.
plan-tree (Lisp file)
(setf plan-tree-node-children) (function)
plan-tree (Lisp file)
plan-tree-node-children (function)
Return whether debug-block represents elsewhere code.
plan-tree (Lisp file)
(setf plan-tree-node-parent) (function)
plan-tree (Lisp file)
plan-tree-node-parent (function)
Return whether debug-block represents elsewhere code.
plan-tree (Lisp file)
(setf plan-tree-node-path) (function)
plan-tree (Lisp file)
plan-tree-node-path (function)
Return whether debug-block represents elsewhere code.
plan-tree (Lisp file)
(setf plan-tree-node-sexp) (function)
plan-tree (Lisp file)
plan-tree-node-sexp (function)
fluent-operators (Lisp file)
goals (Lisp file)
fluent-operators (Lisp file)
utils (Lisp file)
Returns true if node is stale, i.e. it has no associated task object.
task-tree (Lisp file)
Small helper function to get a sub-task of the current task.
task-tree (Lisp file)
Small helper function to get a task from a path.
task-tree (Lisp file)
Returns a fluent indicating if the task is alive
task (Lisp file)
task (Lisp file)
task (Lisp file)
task (Lisp file)
task (Lisp file)
task (Lisp file)
Returns the task-tree node for path or nil.
task-tree (Lisp file)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf task-tree-node-children) (function)
task-tree (Lisp file)
task-tree-node-children (function)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf task-tree-node-code) (function)
task-tree (Lisp file)
task-tree-node-code (function)
Returns the effective code of the node. I.e. the code that is
actually executed. When the node has replacements, the current
replacement is used, otherwise the original code.
task-tree (Lisp file)
task-tree (Lisp file)
Return the parameters with which the task was called. Assume node is not stale.
task-tree (Lisp file)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf task-tree-node-parent) (function)
task-tree (Lisp file)
task-tree-node-parent (function)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf task-tree-node-path) (function)
task-tree (Lisp file)
task-tree-node-path (function)
Return the tasks result. Assume node is not stale.
task-tree (Lisp file)
Return the tasks status fluent. Assume node is not stale.
task-tree (Lisp file)
Establish bindings for task variables and initialize them.
task (Lisp file)
Macroexpands form and calls tag-handler once for every (:tag name body)
form it encounters. The two parameters passed to the tag-handler are name
and body. Returns the expansion of form.
interface (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
task-interface (Lisp file)
task (Lisp file)
Returns the callback with given name or NIL if it doesn’t exist.
fluent-interface (Lisp file)
fluent (Lisp file)
Waits for ‘task’ to finish.
When ‘task’ fails, this function rethrows the failure; when ‘task’
succeeds, it returns the result values of ‘task’.
task-interface (Lisp file)
task (Lisp file)
The name of the task. Mostly for debugging reasons.
Should also become the name of the thread executing
the task.
task (Lisp file)
automatically generated reader method
with-policy (Lisp file)
The name of the fluent. Should be a globally unique symbol.
fluent-interface (Lisp file)
Executed when a top-level-plan is defined.
plans (Lisp file)
hooks
Hook that is executed whenever a condition is
signaled using FAIL.
failures (Lisp file)
hooks
This is a generic function with hook method
combination. All defined methods are executed after a fluent is created.
value-fluent (Lisp file)
hooks
All defined hooks are exected after the top level task has
been joined. The call is made when the dynamic environment established by
the return values of ON-TOP-LEVEL-SETUP-HOOK is still in effect. The call to
this hook is protected by an unwind protect.
language (Lisp file)
hooks
All defined hooks are executed before the top level task is
created. The task-tree passed is the root of the task-tree used in this top
level. Each method must return a cons cell with a list of symbols in the car
and a list of values in the cdr. The lists of all methods are concatenated
and the passed to a progv to establish the dynamic environment where the
top-level task is executed.
language (Lisp file)
hooks
Options: :hook-combination, (lambda (&rest cram-language-implementation::results) (loop cram-language-implementation::for cram-language-implementation::r cram-language-implementation::in cram-language-implementation::results append (car cram-language-implementation::r) cram-language-implementation::into cram-language-implementation::symbols append (cdr cram-language-implementation::r) cram-language-implementation::into values cram-language-implementation::finally (return (cons cram-language-implementation::symbols values))))
automatically generated reader method
with-policy (Lisp file)
Method to trigger the fluent, i.e. notifying all waiting threads,
but without actually changing the fluent value.
fluent-interface (Lisp file)
fluent-net (Lisp file)
fluent (Lisp file)
Method to register an update callback under the corresponding
name. When the name is already known, an error is signaled.
fluent-interface (Lisp file)
fluent (Lisp file)
Method to remove the update callback with the given name.
fluent-interface (Lisp file)
fluent (Lisp file)
Returns the result of the thread. For multiple values, this
function also returns multiple values.
task-interface (Lisp file)
task (Lisp file)
Returns the status fluent of the task.
task-interface (Lisp file)
Fluent indicating the task status.
Cf. STATUS-INDICATOR.
task (Lisp file)
Blocks a thread until it is terminated or awaken.
task-interface (Lisp file)
task (Lisp file)
task-interface (Lisp file)
task (Lisp file)
Reader method, returning the fluent’s value
fluent-interface (Lisp file)
(setf value) (generic function)
pulse-fluent (Lisp file)
fluent-net (Lisp file)
fluent-net (Lisp file)
value-fluent (Lisp file)
Default handler. It seems to be a quite good idea to allow the
usage of value for all types of objects.
fluent (Lisp file)
Setter method to set the new value of the fluent
value-fluent (Lisp file)
value (generic function)
Method to block the current thread until the value of ‘fluent’
becomes non-nil. If ‘timeout’ is specified, waits for at least
timeout and returns.
fluent-interface (Lisp file)
fluent (Lisp file)
fluent (Lisp file)
Wakes up ‘task’ if it’s suspended; otherwise do nothing.
task-interface (Lisp file)
task (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
failures (Lisp file)
plan-failure (condition)
envelop-error (method)
:error
envelop-error (generic function)
failures (Lisp file)
plan-failure (condition)
composite-failures (method)
:failures
’nil
composite-failures (generic function)
Condition which denotes a plan failure.
failures (Lisp file)
serious-condition
with-policy (Lisp file)
policy-failure (condition)
with-policy (Lisp file)
condition
policy-name (method)
:name
policy-name (generic function)
with-policy (Lisp file)
policy-condition (condition)
policy-parameters (method)
:parameters
policy-parameters (generic function)
with-policy (Lisp file)
policy-failure (condition)
with-policy (Lisp file)
policy-condition (condition)
failures (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Represents a piece of code that can be replaced. It contains the
sexp as well as a function object that can be executed. Further, it
contains the top-level task and all tasks in the lexical environment
of the top-level task. This can be used to get the variable bindings
of a specific task without the need to walk the task tree.
task-tree (Lisp file)
structure-object
code-sexp (function)
(setf code-sexp) (function)
code-function (function)
(setf code-function) (function)
code-task (function)
(setf code-task) (function)
code-parameters (function)
(setf code-parameters) (function)
plan-tree (Lisp file)
structure-object
print-object
plan-tree-node-sexp (function)
(setf plan-tree-node-sexp) (function)
plan-tree-node-path (function)
(setf plan-tree-node-path) (function)
plan-tree-node-parent (function)
(setf plan-tree-node-parent) (function)
plan-tree-node-children (function)
(setf plan-tree-node-children) (function)
task-tree (Lisp file)
structure-object
print-object
task-tree-node-code (function)
(setf task-tree-node-code) (function)
(list)
task-tree-node-code-replacements (function)
(setf task-tree-node-code-replacements) (function)
task-tree-node-parent (function)
(setf task-tree-node-parent) (function)
task-tree-node-children (function)
(setf task-tree-node-children) (function)
task-tree-node-path (function)
(setf task-tree-node-path) (function)
(sb-thread:make-mutex)
task-tree-node-lock (function)
(setf task-tree-node-lock) (function)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fluent-interface (Lisp file)
standard-object
The name of the fluent. Should be a globally unique symbol.
symbol
:name
(gensym "fluent-")
name (generic function)
Hash-table of update callbacks, being executed on every change of
the value. The update callback is a function with no parameters.
hash-table
(make-hash-table :test ’eq)
For internal use. Indicates a pulse.
:pulse-count
0
For internal use. Posix condition variable/waitqueue
used for notification when value changed.
For internal use. Lock to be used with for access synchronization.
task (Lisp file)
abstract-task (class)
execute (method)
task (Lisp file)
abstract-task (class)
value-fluent (Lisp file)
The value of the fluent
:value
Test to check for value changes (used in setf value).
:test
#’eql
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
task-interface (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
5.2.1 Special variables | ||
5.2.2 Macros | ||
5.2.3 Functions | ||
5.2.4 Generic functions | ||
5.2.5 Conditions | ||
5.2.6 Structures | ||
5.2.7 Classes | ||
5.2.8 Types |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
A bitmask representing the currently enabled log tags.
logging (Lisp file)
The functions for augmenting the environment as defined in CLTL2 are not in the ANSI Standard and thus implementation-spefic. This lists the functions needed and is assigned in env-impl-specific.lisp.
env (Lisp file)
Contains the current parent when constructing the plan tree during code walking. If we call walk-form with this being nil, it doesnt build a tree, nor follow plan calls.
walker (Lisp file)
Current path during walking and creating the plan tree.
walker (Lisp file)
task (Lisp file)
logging (Lisp file)
This is used to implement PEEK-VALUE.
fluent (Lisp file)
with-policy (Lisp file)
with-policy (Lisp file)
task (Lisp file)
This picks up the shaddowed function while walking, so we dont need to
access the environment (which is not possible in a standardized way, not
even with whats in CLTL2).
walker (Lisp file)
Valid transitions from one task’s status to the next.
task (Lisp file)
task (Lisp file)
task (Lisp file)
Indicates if we want to use synchronized events
task (Lisp file)
When a (:tag name body) form is encounterd during code walking,
all functions in the list that *tag-walker-handlers* refers to are called
with the 2 parameters name and body.
walker (Lisp file)
task-interface (Lisp file)
Determines how task-tree-nodes are pretty-printed. One of (nil :count :full). Default :count
task-tree (Lisp file)
Determines how task-tree-nodes are pretty-printed. Generalized Boolean. Default nil
task-tree (Lisp file)
Determines how task-tree-nodes are pretty-printed. Generalized Boolean. Default t
task-tree (Lisp file)
Determines how task-tree-nodes are pretty-printed. One of (nil :one :full). Default :full
task-tree (Lisp file)
The task tree for named top levels (top level plans) is stored in this hash-table by indexed by the plan name (which is a symbol).
language (Lisp file)
Base timestamp to compute relative real-time timestamps from.
This variable gets its value from the top-level task, all sub tasks
will just inherit it.
logging (Lisp file)
Like *ZERO-REAL-TIME*, but for run-time timestamps.
logging (Lisp file)
logging (Lisp file)
Period in seconds at which an entrance into the event loop is
scheduled.
task (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
def-fluent-operator allows to define fluent operators. It creates a
new function with the given name. When it is called with a fluent
in its parameter list, a fluent network is returned, with the
function body as its calculator. Otherwise, the body is called
directly.
We need one special case. Some operators need to always pulse the
returned fluent net. This is solved by havin a second value. When
the body returns a non-nil second value, the fluent net is always
pulsed, otherwise only when the fluent net value has changed.
fluent-net (Lisp file)
Wrapper around DEFMACRO for defining macros constituting cpl constructs
used in plans.
DEF-PLAN-MACRO wraps ‘body’ in code that checks that it is only used within
cpl plans. More precicesly the macro includes a check that it is used in a
dynamic context where *CURRENT-TASK* is not nil. Otherwise an ERROR
condition is signaled (at runtime).
DEF-PLAN-MACRO also adds information about the plan macro (‘lambda-list’
and ‘body’) to the symbol ‘name’, so the plan walker can use this
information during plan expansion. This information can also be used for
plan transformation.
See Also
WALKER::EXPAND-PLAN
language (Lisp file)
fluent-net (Lisp file)
logging (Lisp file)
(let ((event (make-event ‘(:foo 1 2 3) "Odd Reason" t)))
(destructure-event (event :reason R :sync S)
((:foo X Y Z)
(values X Y Z R S))))
==> 1, 2, 3, "Odd Reason", T
task (Lisp file)
logging (Lisp file)
Creates a new task, executes body in it and waits until it is finished. All
plan macros can only be used within the dynamic scope of a top-level form.
The ‘name’ is used to save the task tree in *top-level-task-trees*.
language (Lisp file)
Like progv, but instead of getting the symbols and values from evaluating
two forms, this version only takes a single form which should return a cons
cell with the symbol list in the car and the value list in the cdr.
language (Lisp file)
walker (Lisp file)
fluent (Lisp file)
Execute ‘child-forms’ in parallel and execute ‘watcher-body’
whenever any child changes its status.
Lexical bindings are established for ‘running’, ‘done’ and ‘failed’
around ‘watcher-body’, and bound to lists of all running, done and
failed tasks. ‘watcher-body’ is executed within an implicit block
named NIL.
‘name’ is supposed to be the name of the plan-macro that’s
implemented on top of WITH-PARALLEL-CHILDS. ‘name’ will be used to
name the tasks spawned for ‘child-forms’.
All spawned child tasks will be terminated on leave.
language (Lisp file)
walker (Lisp file)
Executes body in a separate task and joins it.
language (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
logging (Lisp file)
failures (Lisp file)
logging (Lisp file)
task (Lisp file)
task (Lisp file)
fluent (Lisp file)
If a suspension occurs during the execution of ‘body-thunk’,
unwind out of ‘body-thunk’, continue the suspension process, and
after wakeup execute ‘after-suspension-continuation’.
task (Lisp file)
Renew the current time quantum.
task (Lisp file)
task (Lisp file)
Returns a new environment that is like env, with the according variable, macro, symbol-macro or function bindings added. Other than CLTL2’s augment-environment, this is designed to be especially convenient to call from within the walker.
env (Lisp file)
Calls the implementation specific CLTL2 function.
env (Lisp file)
The meat of DEF-FLUENT-OPERATOR.
fluent-net (Lisp file)
goals (Lisp file)
task (Lisp file)
Execute ‘thunk’, and periodically enter the event-loop.
task (Lisp file)
Execute ‘thunk’, and signal TIME-QUANTUM-EXHAUSTED if the current
time quantum is exhausted.
task (Lisp file)
task (Lisp file)
task (Lisp file)
Check whether we already exceeded our current time quantum.
task (Lisp file)
task (Lisp file)
task-tree (Lisp file)
failures (Lisp file)
task (Lisp file)
task-tree (Lisp file)
task (Lisp file)
task (Lisp file)
plan-tree (Lisp file)
task-tree (Lisp file)
Calls the implementation specific CLTL2 function.
env (Lisp file)
task-tree (Lisp file)
task (Lisp file)
task (Lisp file)
Return whether debug-block represents elsewhere code.
task (Lisp file)
(setf event-reason) (function)
task (Lisp file)
event-reason (function)
Return whether debug-block represents elsewhere code.
task (Lisp file)
(setf event-sync) (function)
task (Lisp file)
event-sync (function)
Return whether debug-block represents elsewhere code.
task (Lisp file)
(setf event-tag) (function)
Return whether debug-block represents elsewhere code.
task (Lisp file)
(setf event-values) (function)
task (Lisp file)
event-values (function)
task-tree (Lisp file)
walker (Lisp file)
fluent-net (Lisp file)
utils (Lisp file)
utils (Lisp file)
utils (Lisp file)
task-interface (Lisp file)
task (Lisp file)
task (Lisp file)
env (Lisp file)
task (Lisp file)
logging (Lisp file)
logging (Lisp file)
logging (Lisp file)
task-tree (Lisp file)
task (Lisp file)
task (Lisp file)
goals (Lisp file)
task (Lisp file)
plan-tree (Lisp file)
goals (Lisp file)
Return whether debug-block represents elsewhere code.
task (Lisp file)
(setf message-content) (function)
task (Lisp file)
message-content (function)
Return whether debug-block represents elsewhere code.
task (Lisp file)
(setf message-from) (function)
task (Lisp file)
message-from (function)
task (Lisp file)
Return whether debug-block represents elsewhere code.
task (Lisp file)
(setf message-to) (function)
task (Lisp file)
message-to (function)
Calls the implementation specific CLTL2 function.
env (Lisp file)
Combines enclose and parse-macro, to return something that can be passed to augment-environment.
env (Lisp file)
Equivalent to (VALUES (REMOVE-IF-NOT P L) (REMOVE-IF P L)).
utils (Lisp file)
task-tree (Lisp file)
plan-tree (Lisp file)
Propagate ‘event’ down to the childs of ‘task’.
task (Lisp file)
fluent (Lisp file)
If an event is currently pending, return it, otherwise return NIL.
If ‘wait’ is true, block until an event arises.
task (Lisp file)
walker (Lisp file)
Registers a code as the default code of a specific task tree
node. If the parameter ’replace-registered’ is true, old code is
always overwritten. Returns the node.
task-tree (Lisp file)
Removes the task tree for a named top level from the global hash table
where those all named top level task trees. You usually won’t need this,
but you can use it to clean up after using named-top-level directly,
e.g. in a test suite.
language (Lisp file)
Adds a code replacement to a specific task tree node.
task-tree (Lisp file)
task (Lisp file)
task (Lisp file)
task (Lisp file)
Send ‘event’ to ‘task’.
If ‘no-sync’ is true, no synchronization is performed on ‘event’,
the decision to do so is left to the caller.
task (Lisp file)
Initialize ‘child-task’ for execution.
Also register it as child to ‘parent-task’.
task (Lisp file)
task (Lisp file)
If ‘event’ is a synchronized event, wait until ‘child-tasks’
acted on it.
task (Lisp file)
walker (Lisp file)
logging (Lisp file)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf task-tree-node-code-replacements) (function)
task-tree (Lisp file)
task-tree-node-code-replacements (function)
Return whether debug-block represents elsewhere code.
task-tree (Lisp file)
(setf task-tree-node-lock) (function)
task-tree (Lisp file)
task-tree-node-lock (function)
Truncate ‘string’ if its length exceeds ‘max-length’. We truncate
in the middle of the string because start and end are usually
crucial to discriminate the abbreviation.
logging (Lisp file)
Unwind using ‘unwind’, then invoke ‘handlers’, and call
‘continuation’.
task (Lisp file)
task (Lisp file)
Walk lambda argument (part of an ordinary lambda list). If it is a list of
at least two elements, walk the cadr. Walk nothing else.
walker (Lisp file)
Walk variable binding like found in let.
walker (Lisp file)
Walk list of variable bindings like found in let or let*. If let*-style-bindings is not nil, the bindings are expanded like in a let*.
walker (Lisp file)
walker (Lisp file)
walker (Lisp file)
Walk the function definitions and the walk the body with the functions
added to the environment.
walker (Lisp file)
Takes a form and an environment and walkes the form if neccessary, after macroexpanding it fully and considering special cases.
walker (Lisp file)
walker (Lisp file)
Walk the cadr. Handle special case of cadr being (lambda () ...), or (setf ...)
walker (Lisp file)
Add the function definitions to the environment, then walk those
definitions and the body.
walker (Lisp file)
walker (Lisp file)
Walk list of bindings and body.
walker (Lisp file)
walker (Lisp file)
Walk each element of the list.
walker (Lisp file)
Walk each element like a lambda form.
walker (Lisp file)
Walk the cadr in a nil lexical environment.
walker (Lisp file)
Add macro or symbol-macro definitions to the environment and proceed
expanding the body (wrapped in a locally).
walker (Lisp file)
walker (Lisp file)
Walk lambda argument list (ordinary lambda list).
walker (Lisp file)
Handles a plan or tag form and creates a node in the plan tree.
walker (Lisp file)
walker (Lisp file)
Current timestamp relative to *ZERO-REAL-TIME*, or *ZERO-RUN-TIME*
depending on ‘kind’.
logging (Lisp file)
Either the name of the current task, or of the current thread.
logging (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
automatically generated reader method
with-policy (Lisp file)
Returns the (currently unsorted) list of child tasks.
task-interface (Lisp file)
(setf child-tasks) (generic function)
task (Lisp file)
child-tasks (generic function)
task (Lisp file)
automatically generated reader method
with-policy (Lisp file)
automatically generated reader method
with-policy (Lisp file)
When the task has been instantiated without a thread function or
the function has not been executed yet, it can be executed with
this method. When ‘ignore-no-parent’ is true, no error message is
signaled when *CURRENT-TASK* is unbound.
task-interface (Lisp file)
task (Lisp file)
task (Lisp file)
task (Lisp file)
task (Lisp file)
task (Lisp file)
Returns NIL if the task has not been executed yet.
task-interface (Lisp file)
task (Lisp file)
automatically generated reader method
with-policy (Lisp file)
language (Lisp file)
hooks
language (Lisp file)
hooks
language (Lisp file)
hooks
task-tree (Lisp file)
hooks
language (Lisp file)
hooks
task-tree (Lisp file)
hooks
failures (Lisp file)
hooks
failures (Lisp file)
hooks
failures (Lisp file)
hooks
failures (Lisp file)
hooks
with-policy (Lisp file)
hooks
with-policy (Lisp file)
hooks
task-interface (Lisp file)
task (Lisp file)
automatically generated reader method
with-policy (Lisp file)
task (Lisp file)
The list of ordering constraint fluents. The task
is not allowed to start running before all fluents
are true.
task (Lisp file)
automatically generated reader method
task (Lisp file)
The name of the task. Mostly for debugging reasons.
Should also become the name of the thread executing
the task.
task (Lisp file)
Re-calculates the value of the fluent. This method
returns two values, the new value and T if the value actually
changed.
fluent-net (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Always signaled with an associated restart CONTINUE-WITH-ADJUSTED-TIME-QUANTUM.
task (Lisp file)
condition
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
task (Lisp file)
structure-object
print-object
keyword
(alexandria.0.dev:required-argument ’cram-language-implementation:tag)
event-tag (function)
(setf event-tag) (function)
(or null simple-string)
event-reason (function)
(setf event-reason) (function)
list
event-values (function)
(setf event-values) (function)
boolean
event-sync (function)
(setf event-sync) (function)
task (Lisp file)
structure-object
cram-language-implementation::abstract-task
(alexandria.0.dev:required-argument ’cram-language-implementation::from)
message-from (function)
(setf message-from) (function)
cram-language-implementation::abstract-task
(alexandria.0.dev:required-argument ’cram-language-implementation::to)
message-to (function)
(setf message-to) (function)
cram-language-implementation::event
(alexandria.0.dev:required-argument ’cram-language-implementation::content)
message-content (function)
(setf message-content) (function)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
task (Lisp file)
standard-object
The name of the task. Mostly for debugging reasons.
Should also become the name of the thread executing
the task.
The internal thread object of the lisp implementation.
(or sb-thread:thread null)
The parent task.
(or cram-language-implementation::abstract-task null)
parent-task (generic function)
The list of child tasks.
(cram-language-implementation::list-of cram-language-implementation::abstract-task)
(list)
child-tasks (generic function)
(setf child-tasks) (generic function)
Fluent indicating the task status.
Cf. STATUS-INDICATOR.
cram-language-implementation:fluent
status (generic function)
The result of the task. When it terminates
normally, the slot contains the list of return
values. For evaporated tasks, it contains nil and
for failed tasks, it contains the condition
object.
(or list null condition)
The function of the task.
(or function null)
:thread-fun
The path of the task.
list
:path
cram-language-implementation:*current-path*
task-path (generic function)
The code of the path.
(or cram-language-implementation:code null)
(and cram-language-implementation::*current-task-tree-node* (cram-language-implementation:task-tree-node-code cram-language-implementation::*current-task-tree-node*))
task-code (generic function)
The list of ordering constraint fluents. The task
is not allowed to start running before all fluents
are true.
(cram-language-implementation::list-of cram-language-implementation:fluent)
(list)
task-constraints (generic function)
(setf task-constraints) (generic function)
sb-concurrency:mailbox
(sb-concurrency:make-mailbox)
task-message-queue (generic function)
This mixin indicates that the value of this fluent
can be cached, i.e. it doesn’t change wihtout sending a pulse.
fluent-interface (Lisp file)
standard-object
fluent-net (Lisp file)
:calculate-value-fun
The cached value of this
fluent network.
:value
Class of fluent networks that directly depend on
fluents that are not cachable.
fluent-net (Lisp file)
fluent (class)
value (method)
The function object to
calculate the value of the fluent.
:calculate-value-fun
This mixin indicates the value of the fluent can be
printed by the pretty-printer. This is not the case for PULSE
fluents, for instance.
fluent-interface (Lisp file)
standard-object
with-policy (Lisp file)
standard-object
:name
name (generic function)
:parameters
parameters (generic function)
:description
description (generic function)
:init
init (generic function)
:check
check (generic function)
:recover
recover (generic function)
:clean-up
clean-up (generic function)
pulse-fluent (Lisp file)
fluent (class)
value (method)
:handle-missed-pulses
# pulses we have processed
so far. We don’t want to use pulse-count
since it is used in wait-for to determine if
something changed. This slot is used to
compute the value.
:processed-pulse-count
0
The pulse count of the
fluent we are monitoring.
:reference-pulse-count
0
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
task (Lisp file)
An event-designator is a either a keyword naming the event, or a
list whose car is such a keyword and whose cdr is a list of
values. The list of values represent additional parameters of the
event and can be destructured in DESTRUCTURE-EVENT.
task (Lisp file)
utils (Lisp file)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
A.1 Concepts | ||
A.2 Functions | ||
A.3 Variables | ||
A.4 Data types |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | C F L M S |
---|
Jump to: | C F L M S |
---|
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | %
(
*
+
-
/
<
=
>
A C D E F G I J K L M N O P R S T U V W |
---|
Jump to: | %
(
*
+
-
/
<
=
>
A C D E F G I J K L M N O P R S T U V W |
---|
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | *
+
C D E F H I L M N O P R S T V |
---|
Jump to: | *
+
C D E F H I L M N O P R S T V |
---|
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Jump to: | A C E F L M P S T V |
---|
Jump to: | A C E F L M P S T V |
---|
[Top] | [Contents] | [Index] | [ ? ] |
[Top] | [Contents] | [Index] | [ ? ] |
This document was generated by gaya on February 1, 2016 using texi2html 1.82.
The buttons in the navigation panels have the following meaning:
Button | Name | Go to | From 1.2.3 go to |
---|---|---|---|
[ < ] | Back | Previous section in reading order | 1.2.2 |
[ > ] | Forward | Next section in reading order | 1.2.4 |
[ << ] | FastBack | Beginning of this chapter or previous chapter | 1 |
[ Up ] | Up | Up section | 1.2 |
[ >> ] | FastForward | Next chapter | 2 |
[Top] | Top | Cover (top) of document | |
[Contents] | Contents | Table of contents | |
[Index] | Index | Index | |
[ ? ] | About | About (help) |
where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
This document was generated by gaya on February 1, 2016 using texi2html 1.82.