## Examples

### List Concatenation

```append(c(1,c(2,c(3,n))),c(4,c(5,n)),result).
append(X,Y,Z), n(X)      :- Y=Z.
append(X,Y,Z), c(A,X1,X) :- c(A,Z1,Z), append(X1,Y,Z1).```

RESULT: result(c(1,c(2,c(3,c(4,c(5,n)))))) with the two rules above.

The first line of the above example is written using the term abbreviation scheme explained in the Syntax page. By making more use of the term abbreviation scheme and the Prolog-like list syntax, list concatenation can be written also as:

```result = append([1,2,3],[4,5]).
Z=append([],    Y) :- Z=Y.
Z=append([A|X1],Y) :- Z=[A|append(X1,Y)].```

RESULT: result=[1,2,3,4,5] with the two rules above.

### Self-Organizing Loops

```a(free,free),a(free,free),a(free,free),a(free,free),a(free,free),
a(free,free),a(free,free),a(free,free),a(free,free),a(free,free),
a(free,free),a(free,free),a(free,free),a(free,free),a(free,free),
a(free,free),a(free,free),a(free,free),a(free,free),a(free,free),
a(free,free),a(free,free),a(free,free),a(free,free).
a(X,free),a(free,Y) :- a(X,C),a(C,Y).```

RESULT: Many possible results. You can obtain them by running the program using the -s option.

### Vending Machine

```{customer,a,five,one,one,hunger,hunger}.  % Customer a has \$7, buying 2 chocos
{customer,b,five,hunger}.                 % Customer b has \$5, buying 1 choco
{vending,choco,choco,choco,one,one}.      % Vending machine has 3 chocos
{customer,\$c,hunger,five},  {vending,\$v,choco,one,one}
:- {customer,\$c,choco,one,one},{vending,\$v,five}.
{customer,\$c,hunger,one,one,one},{vending,\$v,choco}
:- {customer,\$c,choco},             {vending,\$v,one,one,one}.```

Two customers with different amounts of coins and hunger are buying some chocolates from a vending machine. Each chocolate costs three and only two kinds of coins are considered: one and five.

Run this program several times in shuffle mode (type shuffle) to observe its non-deterministic behavior.

```RESULT 1:
{customer,a,choco,choco,one},
{customer,b,choco,one,one},
{vending,five,five,one}, <RULES>
RESULT 2:
{customer,a,hunger,hunger,five,one,one},
{customer,b,choco,one,one},
{vending,choco,choco,five}, <RULES>```

Observe that applying each rule preserves the total amount of coins and chocos within this system.