1

似乎有时函数式程序中的代码接受其他代码(函数)作为参数并对其进行修改并将其返回以供执行。它似乎类似于自修改代码。这是否意味着函数式程序的紧凑性与允许极其紧凑的自修改程序的原因相同?

4

1 回答 1

1

Ernest Friedman-Hill 可能是正确的,这个问题不属于这里,但这里有一个答案:

我会说:不。

一种语言可以通过多种方式允许自修改代码。最灵活的方法是能够翻转内存中任意位置的任意位。(这是一个经典的故事:梅尔的故事。)但是自我修改的方法不需要表现出如此危险的自由。在 Common Lisp 中,很容易编写构建 Lisp 代码并对其进行评估的代码,但这一切都在 Lisp 的约束范围内,而且它不一定更紧凑。在 Java 中,您可以使用反射进行某些类型的“自我修改”,但这通常比常规 Java 使用更冗长。

另外,请记住,在某些类型的面向对象方法和函数式编程方法之间实际上有一条细线。两者都允许您将可执行的东西和数据打包在一起。OO 通过将方法附加到对象来做到这一点,而函数式语言通过使用闭包来捕获数据来做到这一点。因此,如果函数式语言是自修改的,那么 Java 也是。但是 Java 通常不被认为是一种自修改语言(反射除外),而且 Java 代码通常很冗长。(顺便说一下,Java 的设计者之一 Guy Steele 也是设计 Lisp 方言方案的人之一——一种比 Common Lisp 更纯粹的函数式语言——为了试验面向对象的编程!我相信这个想法是使用闭包构造不同的面向对象语言结构。)

警告:我已经有一段时间没有进行任何核心 Java 编程了,而且我可能不知道与这个问题相关的语言特性。

于 2013-04-13T04:36:02.987 回答