canfly(X) :- penguin(X), !, fail.
canfly(X) :- bird(X).
}
Dynamically, the occurrence of a cut in the first clause enforces that there is no alternative to failure
once it is established that the animal in question is a penguin.
Making use of what we will introduce later as a meta-programming facility
we can implement the (meta) predicate