Another example where the relation as argument pattern is useful is in “relation composition”, e.g.
x(moisture, causes, mold).
x(mold, causes, allergy).
x(sanding, causes, dust).
x(dust, prevents, adhesion).
x(vaccine, prevents, disease).
x(disease, prevents, health).
x(food, prevents, hunger).
x(hunger, prevents, energy).
x(energy, causes, happiness).
relation(X, R, Y):- x(X, R, Y).
relation(X, causes, Y):- x(X, R, Z), relation(Z, R, Y).
relation(X, prevents, Y):- x(X, causes, Z), relation(Z, prevents, Y).
relation(X, prevents, Y):- x(X, prevents, Z), relation(Z, causes, Y).
go:- relation(X, R, Y), writeln(relation(X, R, Y)), fail.
OUTPUT:
relation(moisture,causes,mold)
relation(mold,causes,allergy)
relation(sanding,causes,dust)
relation(dust,prevents,adhesion)
relation(vaccine,prevents,disease)
relation(disease,prevents,health)
relation(food,prevents,hunger)
relation(hunger,prevents,energy)
relation(energy,causes,happiness)
relation(moisture,causes,allergy)
relation(vaccine,causes,health)
relation(food,causes,energy)
relation(food,causes,happiness)
relation(sanding,prevents,adhesion)
relation(hunger,prevents,happiness)