Rank polymorphism gives you code reuse on arguments of different dimensions. Take a linear interpolation function (let’s just call it
lerp) for scalars:
(λ ((lo 0) (hi 0) (α 0)) (+ (* lo (- 1 α)) (* hi α)))
The number marks on each argument indicate the expected “rank” of the argument: how many dimensions it should have. In this case, each one is marked
0, indicating a scalar (i.e., 0-dimensional) argument. The function is usable as-is for
α-blending two RGB pixels
dimming or brightening an image
fade transition between video scenes
PRL recently produced three papers for the SNAPL conference.
- Linking Types for Multi-Language Software: Have Your Cake and Eat It Too, by Daniel Patterson and Amal Ahmed.
- Search for Program Structure, by Gabriel Scherer
- Migratory Typing: Ten Years Later, by Sam Tobin-Hochstadt, Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Ben Greenman, Andrew M. Kent, Vincent St-Amour, T. Stephen Strickland and Asumu Takikawa
Over the past 50 years, which result from programming languages research has had the greatest impact on working programmers?