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

# Invocations and Rules

Gentle
Applications
Concepts
Examples
Handbook
Support

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:

```
IsJimsColor(Val)
```
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.