【发布时间】:2021-10-24 14:26:29
【问题描述】:
在函数式编程中,我们倾向于区分数据和函数,但有什么区别呢?
如果我考虑一个常量,我可以把它看作一个函数,它只是返回相同的值:
(def x 5)
那么数据和函数有什么区别呢?我看不出有什么不同。
【问题讨论】:
-
如果你说的是一等纯函数,那么反过来说:没有区别。函数的特殊之处在于它们是不透明的类型。
-
这方面可能有趣的是SICP's section on Data as Programs:“从用户的角度来看,
(* x x)这样的输入表达式是编程语言中的表达式,求值者应该执行它。从然而,从评估者的角度来看,表达式只是一个列表(在这种情况下,是一个由三个符号组成的列表:*、x和x),它将根据一组明确定义的规则...... [T]用户的程序是评估者的数据”。 -
Clojure 的特性,即程序是用 Clojure 本身的原始类型的数据结构编写的,称为homoiconicity。
标签: functional-programming clojure