17

通读这个问题这篇博文让我对类型代数有了更多的思考,特别是如何滥用它。

基本上,

1)我们可以将Either A B类型视为加法:A+B

2)我们可以将有序对(A,B)视为乘法:A*B

3)我们可以把函数想象A -> B成幂:B^A

这里有一个明显的模式:乘法是重复加法,求幂是重复乘法。这导致Knuth 定义了向上箭头↑ 定义为取幂,↑↑ 定义为重复取幂,↑↑↑ 定义为重复 ↑↑,依此类推。因此,10↑↑↑↑10 是一个巨大的数字。

我的问题是:函数↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑如何用代数数据类型表示?似乎 ↑ 应该是一个具有无限个参数的函数,但这没有多大意义。A↑B将只是是,[A] -> B因此A↑↑↑↑B是?[[[[A]]]]->B

如果您能解释阿克曼函数的外观或任何其他超增长函数,则可以加分。

4

1 回答 1

8
于 2012-11-01T07:51:36.923 回答