next up previous contents
Next: 3.2.4 Tuple- and cons-passivating Up: 3.2 The bastron transformers Previous: 3.2.2 Flattening

3.2.3 Flattering


Flattering (command: flatter) acts like flatten (cf. subsection 3.2.2) but additionally replaces embedded structures (both in the premises and in the head) by newly generated variables and associates these with each other through preceding is-calls.

For example, one can also employ child as an undefined binary constructor in structures like child[P,Q], just denoting P and Q's children. An embedding of such a denotative formula into an evaluative formula leaves the main formula flat. Thus, the cares body of the footened form

parental(P) :- cares(P,child[P,Q]) & true.
in subsection 3.2.7 cannot be flattened but it can be flattered to
parental(P) :- _1 is child[P,Q], cares(P,_1) & true.

Sample dialog (equivalent to flatten followed by flatter up to variable renaming):

rfi-p> az f(k[]) :- g(h()) & j(k[]).
rfi-p> flatter
rfi-p> listing
f(_1) :- _1 is k[], _2 is h(), g(_2), _3 is k[] & j(_3).

Harold Boley (