怎么理解函数式编程中的"变量也是函数"

2014 年 4 月 15 日
 pythonee
在大多数函数式编程语言中,大多数都强调一切都是函数,函数式一等公民。
那么 "变量" 也是 "函数"

var foo = "hello world"

那么"foo"这个变量也是一个函数?

是不是可以说等价于下面的函数写法

def foo() = { "hello world" }

即变量名是方法名,变量值是返回值。
那么这样说的话,函数式和命令式的本质区别是什么呢?只是表示形式上的区别吗
7646 次点击
所在节点    程序员
40 条回复
min
2014 年 4 月 15 日
函数==变量说明函数的参数和返回值也可以是函数,这点很重要
zzNucker
2014 年 4 月 15 日
说法有问题吧,不是“变量也是函数”。
是“函数”可以赋给变量。

延伸出去就是函数可以作为返回值,可以作为参数,可以作为XXXXX。
otakustay
2014 年 4 月 15 日
应该是“变量可以是函数”吧?
walleL
2014 年 4 月 15 日
walleL
2014 年 4 月 15 日
楼上各位真快 。。。
jsonline
2014 年 4 月 15 日
没听说过这句话
ibudao
2014 年 4 月 15 日
有点意思,不过我觉得本质是:数据即代码,代码即数据。所谓代码,就是可以被执行的,或者说加上了可eval的标记,但其实也是一种数据。
变量实际上是一种标识符,函数名也是一种标识符,而标识符通常被解析为一个内存地址,这个内存地址可以存放数据,也可以存放代码。
命令式语言中,通常变量类型的标识符存放的是数据;而函数式语言则都可存放。
NemoAlex
2014 年 4 月 15 日
听说过一切都是对象,没听说一切都是函数...
求出处,需要研读一下
ibudao
2014 年 4 月 15 日
@NemoAlex 一切都是0和1...
NovemberEleven
2014 年 4 月 15 日
就像数学,y可以是一个函数,也可以是一个数字。
zhy0216
2014 年 4 月 15 日
常量函数
pengyang
2014 年 4 月 15 日
学习了,谢谢
pythonee
2014 年 4 月 15 日
@NemoAlex 出处找不到了,记得是看haskell还是lisp提到的
standin000
2014 年 4 月 15 日
是数据也是函数。在其它语言里,数据和函数是区分的。

最直观的就是代码本身在LISP中也是可以eval的。
Kabie
2014 年 4 月 15 日
...给成员变量设getter和setter倒是面向对象语言经常提的吧。。。
dun2
2014 年 4 月 15 日
> 那么这样说的话,函数式和命令式的本质区别是什么呢?只是表示形式上的区别吗

严格的函数式编程强调不使用mutable的变量。
即变量一旦赋值以后就无法更改。

这样就不存在状态的争抢,利于实现并发和分布式的场景了。
plprapper
2014 年 4 月 15 日
fordo(){
commond=$1
for i in `seq 100`
do
$commond
sleep 1s
done
}

。。。
flypiggy
2014 年 4 月 15 日
函数式编程就没有变量....
pythonee
2014 年 4 月 15 日
@flypiggy 是的,我也就是这个意思,变量不过是表现的像个变量,其实是个无参函数。但是这句话没有说清我那个疑问啊
simpx
2014 年 4 月 15 日
[OT]
少年,过去我也像你这样,被一些优雅的概念吸引,尤其是“万物皆函数”、“数据即代码”这一类的大一统的概念。
但后来我刨根问底后发现,这些优雅的概念仅仅是复杂现实的一个理想性封装,比如拥有这些“特性”的语言,底层实现也是非常dirty的,真正的优雅,只能存在数学里。
这些人造概念的坏处,被你说中了,有些就是”形式上的区别“,它底层逃不开笨拙的机器
所以,不用纠结于这些人造的概念,要么多看算法,要么,多写代码。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/108653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX