Noos represents problem solving knowledge by means of methods. A method description is the Noos expression needed to construct a method. As any description, it is a way of constructing a feature term, and thus a Noos method is also a feature term. Intuitively, a method represents a process of problem solving--i. e. a way to solve a problem. A method description is also composed by a collection of features. The features of a method description have an interpretation different from that of concept description.
A second important aspect of methods is the specific way in which they combine the feature values--i. e. the knowledge of sources and the results of the subtasks. Noos provides a initial set of existing methods called built-in methods . New methods can be defined by refinement and combination of other methods--but in the bottom line they can be conceived of as multiple refinements and combinations of the built-in methods understood by the Noos interpreter. The set of built-ins in the interpreter is extendable, as explained in Chapter 11.
Intuitively, a method is a function the parameters of which are passed by name (the required feature names) instead of by position. A method returns a value as result of being evaluated. The value returned can be any Noos object: a number, a string, a symbol, or a feature term--including a method. Metalevel methods are methods that return a method and that are used in a particular way in metalevels. Metalevel methods will be described in the next section (§ 2.4)
For instance, the conditional function in Lisp is a expression
(if ) where x is an expression returning a boolean, y
is the expression evaluated when condition is true and z is the
expression evaluated when condition is false. Clearly the role of each
variable or subexpression is given by being in position 1, 2, or 3 of the
parameter list. The conditional method in Noos is a built-in called
conditional, and the three roles (that we call subtasks) are given by
features with name condition, result, and otherwise.
Below is the conditional method (being a refinement of method
indicates it is a built-in); the parameters to be passed by name to the
conditional are indicated by any.
The subtasks of a conditional can be defined in any order, i.e.
conditional can be written (define (method conditional) (result any)
(condition any) (otherwise any)). The conditional method performs
first the subtask condition and depending on its result being
true or false either the subtask result or
the otherwise subtask is performed. Subtasks, moreover, can be
defined partially: conditional description can be refined to create a
new feature term where only some subtasks are defined.
New methods are defined by refinement and combination of other methods, we shall call this activity method configuration. Next section introduces method definition by refinement and § 2.3.2 touches upon method configuration.