{'fraction_non_alphanumeric': 0.03253796095444685, 'fraction_numerical': 0.0021691973969631237, 'mean_word_length': 5.017391304347826, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Translating recursion schemes into program schemes

Here and in a further paper [2] we study translations between schemes and related equivalence problems, i.e., problems of determining whether two schemes in a given class are equivalent. In particular, we are concerned with the question of developing methods for attacking these problems. It seems to us that some “general methods” ought to exist or, at least, a general form ought to be given to the existing “tricks”. In these papers we present four methods: applying the theory of formal languages, programming, measuring the complexity of a computation, and “cutting and pasting” (roughly speaking, the application of a method due to Rabin and Scott [8] to bound the search necessary to determine if two schemes will behave differently).
 Although a few of the results are true for some general notion of scheme, we have nearly always had in mind, for the sake of illustration, just three specific classes of schemes: program schemes, program schemes augmented with counters, and recursively defined schemes. The greater part of the study is restricted to monadic schemes (i.e., schemes containing only functions and predicates of a single argument), and in the case of recursively defined schemes, we are concerned almost exclusively with the single variable monadic recursion schemes introduced by de Bakker and Scott in [1].