Prologs ability to return multiple answers on backtracking provides an elegant mechanism to derive reversible encodings of combinatorial objects as Natural Numbers i.e. {em ranking} and {em unranking} functions. Starting from a generalization of Ackermans encoding of Hereditarily Finite Sets with Urelements and a novel tupling/untupling operation, we derive encodings for Finite Functions and use them as building blocks for an executable theory of {em Hereditarily Finite Functions}. The more difficult problem of {em ranking} and {em unranking} {em Hereditarily Finite Permutations} is then tackled using Lehmer codes and factoradics. The paper is organized as a self-contained literate Prolog program available at url{http://logic.csci.unt.edu/tarau/research/2008/pHFF.zip}