LISP的代码 - 数据意识形态与高阶函数基本相同吗?

时间:2014-10-04 20:06:43

标签: scala clojure lisp higher-order-functions

所以,我一直试图围绕clojure的代码作为数据方法的想法,这肯定有点令人困惑。看起来很像他们只是那种高阶函数。这两个概念之间有区别吗?

2 个答案:

答案 0 :(得分:12)

代码作为数据是更进一步的。 HOF为您提供代码作为数据,因为您可以将可执行块传递到其他可执行块,并组成它们。但是你无法操纵块本身的结构。它有点像只使用一个方法的对象(调用函数),但不会泄漏数据。

完全一般,代码作为数据意味着代码的工作方式与您环境中的任何其他数据结构一样,并且以编程方式操作内容。所提到的同性性@coredump极大地促进了这一点,因为您可以对可应用于任何其他本机数据结构的代码块使用完全相同的操作和转换。但并非严格要求同质性。许多非同色语言提供了元编程功能,可以让您获得类似的结果,例如Scala的macrosquasiquotes(用于编译时代码操作)和toolboxes(用于运行时恭维)或Python的ast

答案 1 :(得分:0)

作为数据的代码更多地是关于homoiconicity并且编写一般编写代码的代码。高阶函数可以用于此,但它更多的是关于宏。当您获取一些代码,转换它们并返回其他一些代码时,我们将对其进行评估。