动机:我希望能够在没有一阶函数的语言中使用玩具函数式编程,方法是使用自然数而不是函数。
通用函数是一个函数 f : N -> (N -> N),相当于 f : N * N -> N 枚举所有可能的可计算函数。换句话说,有一个数字 k 使得 f(k) 是平方函数,有一个数字 j 使得 f(j) 是第 n 个素数函数等。
要编写这样一个函数,可以采用任何图灵完备的语言(编程语言编译器、lambda 演算、图灵机......)并枚举所有程序。我希望不仅允许评估,还允许对加法、合成、柯里化等功能进行操作。例如,给定两个函数 f,g 的索引,我想知道函数 f+g 或由 g 组成的 f 的索引是什么。这将允许“玩具函数式编程”。
编写这样的代码库的好方法是什么?我不是在寻找难以计算 10 阶乘的简约 Turing tarpit,我也不想编写高级编译器。它应该具有一些基本功能,例如添加和编写循环的可能性,但仅此而已。
欢迎使用所有高级语言的解决方案。伪代码、Haskell 和 Python 是首选。您可以假设任意精度算术。eval
不允许使用或类似的。
澄清:枚举函数将由所有部分递归(可计算)函数组成- 这包括不会在某些输入上停止的函数。在这种情况下,通用功能将挂起;当然这是不可避免的。另请参阅:m-recursive 函数 - http://en.wikipedia.org/wiki/Μ-recursive_function。