[NEXT] [PREV]    HANDBOOK / GENTLE PRIMER / Describing Computations /

Invocations and Rules


A predicate is used to specify a computation. Such a computation is triggered by a predicate invocation. For example, if we have defined a predicate favorite that determines for a given Person the favorite Color, then we can write

   favorite(P -> C)
to ask for the favorite color C of P.

A predicate is described by rules. For example, the predicate favorite could have been defined by the following rules:

   'rule' favorite (jim -> red)
   'rule' favorite (julia -> blue)
   'rule' favorite (jane -> red)
   'rule' favorite (john -> yellow)
An item like favorite (jim -> red) here is called a rule heading (rule bodies, here empty, are discussed later).

An invocation

   favorite (julia -> C)
would define the variable C as blue because the second rule defines the output blue for the input julia.

A predicate may have input and output parameters. The input parameters come first, the output parameters being separated by an arrow. Here is a predicate with no output parameters:

with rule

   'rule' IsJimsColor(red)
and one with no input parameters:

   JimsColor(-> Val)
with rule

   'rule' JimsColor(-> red)
If a list of input or output parameters is supplied, a comma is used to separate the members.