DeepAI AI Chat
Log In Sign Up

Classical (Co)Recursion: Programming

by   Paul Downen, et al.

Our aim here is to illustrate how the benefits of structural corecursion can be found in a broader swath of the programming landscape than previously thought. Beginning from a tutorial on structural corecursion in the total, pure functional language Agda, we show how these same ideas are mapped to familiar concepts in a variety of different languages. We show how corecursion can be done in strict functional languages like Scheme, and even escapes the functional paradigm entirely, showing up in the natural expression of common object-oriented features found in languages like Python and Java. Opening up structural corecursion to a much wider selection of languages and paradigms – and therefore, also to a much larger audience of programmers – lets us also ask how corecursion interacts with computational effects. Of note, we demonstrate that combining structural corecursion with effects can increase its expressive power. We show a classical version of corecursion – using first-class control made possible by Scheme's classical call/cc – that enables us to write some new stream-processing algorithms that aren't possible in effect-free languages.


page 1

page 2

page 3

page 4


Simple Reference Immutability for System F-sub

Reference immutability is a type based technique for taming mutation tha...

Proceedings of the 2020 Scheme and Functional Programming Workshop

This report aggregates the papers presented at the twenty-first annual S...

Induction, Coinduction, and Fixed Points: A Concise Survey (and Tutorial)

In this survey paper we present the formulation of the induction and coi...

An Exploratory Study on the Predominant Programming Paradigms in Python Code

Python is a multi-paradigm programming language that fully supports obje...

Detecting unanticipated mutual recursion using Elegant Objects representation of object-oriented programs

Elegant Objects (EO) is a variation of the object-oriented programming p...

Fluent APIs in Functional Languages (full version)

Fluent API is an object-oriented pattern for elegant APIs and embedded D...

Equinox: neural networks in JAX via callable PyTrees and filtered transformations

JAX and PyTorch are two popular Python autodifferentiation frameworks. J...