由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 这么说吧,fp不是否定变量,而是控制变量的范围
相关主题
关于FP问个c++问题
对 (im)mutability 的误解和深度理解没人觉得python的string是immutable不爽吗?
Python Q: function pass in struct pointer, come back with data filled从今天开始起,学C++!
go也是三种paradigm混合的语言return value of a python function...
粉FP的人是因为把电脑想象成图灵机了Haskell 大神请指教我这段程序为什么out of memory
FP 之我见 (长)const in c++
iq 140的人说小时候无法理解变量,需要妈妈帮忙也谈OOP跟FP之争
FP更接近人的思维OOP里面的Object其实是actor
相关话题的讨论汇总
话题: fp话题: 变量话题: 函数话题: 语言话题: mutable
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 54598
1
immutable讲的是func之间要immutable
内部无所谓,完全可以不控制
所以有个scope的问题
但是为什么func的参数需要immutable呢?
fp的zealot没有一个说得清楚的
都是各种大概念满天飞
甚至否定数学上变量存在的意义
为了自圆其说,笑死了
估计他们自己也都没有真的弄明白为什么要这样
fp只是很多人的一个虎皮而已
一旦撕下这个虎皮,你会发现
其实他根本就不明白为什么要用fp
这就是杀人游戏,你不说我什么都看不出来
你说得越多,破绽越多,就越能看明白你到底是不是懂
l******t
发帖数: 55733
2
因为lambda里没有变量的位置啊。
你要想吧lambda写的像有变量很容易的。haskell的let,where够你用的。scala直接可
以定义val。当然,let,where的本质还是声明了一个匿名lambda传参。
你要想定义状态,那更完全没问题。用FP定义状态保证比你在过程里声明一堆var好用
维护的多。
如果你非要z=x; x=y;y=z;来做swap,没for(int i =0;)就不会写了。那还是别用fp了
z****e
发帖数: 54598
3
mutable var的存在会使得func变得不确定
这是唯一的原因
func的确定性会受到冲击
在多线程环境下就不安全了
这个其实对于随便一个语言来说都可以直接用
无论是不是fp,说这个东西跟fp不fp没关系

【在 l******t 的大作中提到】
: 因为lambda里没有变量的位置啊。
: 你要想吧lambda写的像有变量很容易的。haskell的let,where够你用的。scala直接可
: 以定义val。当然,let,where的本质还是声明了一个匿名lambda传参。
: 你要想定义状态,那更完全没问题。用FP定义状态保证比你在过程里声明一堆var好用
: 维护的多。
: 如果你非要z=x; x=y;y=z;来做swap,没for(int i =0;)就不会写了。那还是别用fp了
: ,

p*****2
发帖数: 21240
4

我就说了,学习的是思想,大牛你还不同意。FP的思想可以用于OO。

【在 z****e 的大作中提到】
: immutable讲的是func之间要immutable
: 内部无所谓,完全可以不控制
: 所以有个scope的问题
: 但是为什么func的参数需要immutable呢?
: fp的zealot没有一个说得清楚的
: 都是各种大概念满天飞
: 甚至否定数学上变量存在的意义
: 为了自圆其说,笑死了
: 估计他们自己也都没有真的弄明白为什么要这样
: fp只是很多人的一个虎皮而已

z****e
发帖数: 54598
5
好吧,当我把它肢解了之后,发现可以逐个吸收

【在 p*****2 的大作中提到】
:
: 我就说了,学习的是思想,大牛你还不同意。FP的思想可以用于OO。

p*****2
发帖数: 21240
6

没错。什么纯了都不好。

【在 z****e 的大作中提到】
: 好吧,当我把它肢解了之后,发现可以逐个吸收
d*******r
发帖数: 3299
7
记得以前王垠blog上讨论过这个
=================================================
http://www.douban.com/note/269210328/
其实要达到纯函数式语言的这种“纯”的效果,你根本不需要使用像 Haskell 这样完
全排斥“赋值语句”的语言。你甚至不需要使用 Lisp 这样的“非纯”函数式语言。你
完全可以用 C 语言,甚至汇编语言,达到同样的效果。
我只举一个非常简单的例子,如果你在 C 语言里面定义如下的“函数”。虽然函数体
里面含有赋值语句,它却是一个真正意义上的“纯函数”:
int f (int x) {
int y, z;
y = 2 * x;
z = y + 1;
y = z / 3;
return y;
}
这是为什么呢?因为它计算的是数学函数 (2x+1)/3 。你给它同样的输入,肯定会得到
同样的输出。函数里虽然对 y 和 z 进行了赋值,但这种赋值都是“局部”的,它不会
在函数里留下“状态”。所以这个函数虽然使用了被“纯函数程序员”们唾弃的“赋值
语句”,它仍然完全的符合“纯函数”的定义。
=================================================

【在 z****e 的大作中提到】
: immutable讲的是func之间要immutable
: 内部无所谓,完全可以不控制
: 所以有个scope的问题
: 但是为什么func的参数需要immutable呢?
: fp的zealot没有一个说得清楚的
: 都是各种大概念满天飞
: 甚至否定数学上变量存在的意义
: 为了自圆其说,笑死了
: 估计他们自己也都没有真的弄明白为什么要这样
: fp只是很多人的一个虎皮而已

p*****2
发帖数: 21240
8

这么说就SB了。

【在 d*******r 的大作中提到】
: 记得以前王垠blog上讨论过这个
: =================================================
: http://www.douban.com/note/269210328/
: 其实要达到纯函数式语言的这种“纯”的效果,你根本不需要使用像 Haskell 这样完
: 全排斥“赋值语句”的语言。你甚至不需要使用 Lisp 这样的“非纯”函数式语言。你
: 完全可以用 C 语言,甚至汇编语言,达到同样的效果。
: 我只举一个非常简单的例子,如果你在 C 语言里面定义如下的“函数”。虽然函数体
: 里面含有赋值语句,它却是一个真正意义上的“纯函数”:
: int f (int x) {
: int y, z;

l*y
发帖数: 21010
9
这么说一点都不sb

【在 p*****2 的大作中提到】
:
: 这么说就SB了。

p*****2
发帖数: 21240
10

他这个不能保证纯。

【在 l*y 的大作中提到】
: 这么说一点都不sb
相关主题
FP 之我见 (长)问个c++问题
iq 140的人说小时候无法理解变量,需要妈妈帮忙没人觉得python的string是immutable不爽吗?
FP更接近人的思维从今天开始起,学C++!
进入Programming版参与讨论
l*y
发帖数: 21010
11
用local ariable就是纯的

【在 p*****2 的大作中提到】
:
: 他这个不能保证纯。

p*****2
发帖数: 21240
12

用local就纯?
FP是一种更高级的编程技术,C这么底层的根本不可能做到FP。

【在 l*y 的大作中提到】
: 用local ariable就是纯的
b********0
发帖数: 62
13
可是他说的是 达到pure的效果 也就是相同的输入一定能得到相同的输出..

【在 p*****2 的大作中提到】
:
: 用local就纯?
: FP是一种更高级的编程技术,C这么底层的根本不可能做到FP。

l*y
发帖数: 21010
14
只是用c达到fp的一个方面

【在 p*****2 的大作中提到】
:
: 用local就纯?
: FP是一种更高级的编程技术,C这么底层的根本不可能做到FP。

N******K
发帖数: 10202
15
swap 不用临时变量 怎么实现?
杂技演员 两个手里的东西 往天上一扔 然后互相换位置?
就算这样 这个“天”就是临时存储空间

【在 l******t 的大作中提到】
: 因为lambda里没有变量的位置啊。
: 你要想吧lambda写的像有变量很容易的。haskell的let,where够你用的。scala直接可
: 以定义val。当然,let,where的本质还是声明了一个匿名lambda传参。
: 你要想定义状态,那更完全没问题。用FP定义状态保证比你在过程里声明一堆var好用
: 维护的多。
: 如果你非要z=x; x=y;y=z;来做swap,没for(int i =0;)就不会写了。那还是别用fp了
: ,

c******o
发帖数: 1277
16
没有mutable,为什么要swap?
有其他的方法做类似的事

【在 N******K 的大作中提到】
: swap 不用临时变量 怎么实现?
: 杂技演员 两个手里的东西 往天上一扔 然后互相换位置?
: 就算这样 这个“天”就是临时存储空间

a*****e
发帖数: 1700
17
这个例子只能说明 mutable by default 需要遵守一定规则 (使用 non-escaping 局部
变量)才能安全,想用它来例证 mutable by default 好?逻辑上讲不通。
为什么我说 non-escaping,因为如果使用 closure 捕捉局部变量成为环境变量,就
escape 了它们原先的定义域,mutation 会导致意想不到的状况,和使用全局 mutable
变量类似。

【在 l*y 的大作中提到】
: 这么说一点都不sb
n*w
发帖数: 3393
18
如果要把tuple位置换一下,
let swap (a, b) = (b, a)

【在 N******K 的大作中提到】
: swap 不用临时变量 怎么实现?
: 杂技演员 两个手里的东西 往天上一扔 然后互相换位置?
: 就算这样 这个“天”就是临时存储空间

h*i
发帖数: 3446
19
这是明显的吧。FP语言也是在IP机器上实现的。但是,能用IP语言实现不说明FP语言就
不需要了,就如不能说机器语言能干高级语言的一切所以不需要高级语言一样。

★ 发自iPhone App: ChineseWeb 8.7

【在 d*******r 的大作中提到】
: 记得以前王垠blog上讨论过这个
: =================================================
: http://www.douban.com/note/269210328/
: 其实要达到纯函数式语言的这种“纯”的效果,你根本不需要使用像 Haskell 这样完
: 全排斥“赋值语句”的语言。你甚至不需要使用 Lisp 这样的“非纯”函数式语言。你
: 完全可以用 C 语言,甚至汇编语言,达到同样的效果。
: 我只举一个非常简单的例子,如果你在 C 语言里面定义如下的“函数”。虽然函数体
: 里面含有赋值语句,它却是一个真正意义上的“纯函数”:
: int f (int x) {
: int y, z;

z****e
发帖数: 54598
20


【在 c******o 的大作中提到】
: 没有mutable,为什么要swap?
: 有其他的方法做类似的事

相关主题
return value of a python function...也谈OOP跟FP之争
Haskell 大神请指教我这段程序为什么out of memoryOOP里面的Object其实是actor
const in c++mutating input argument不应该鼓励吧
进入Programming版参与讨论
h*i
发帖数: 3446
21
Right on

★ 发自iPhone App: ChineseWeb 8.7

【在 c******o 的大作中提到】
: 没有mutable,为什么要swap?
: 有其他的方法做类似的事

z****e
发帖数: 54598
22
极少情况会escape出来
java的反射也做不到
反射可以抓出private member
但是local var还是不行
只有提供debug模式的jvm
会让外界看到这个var的val是啥
这么做仅仅是为了给ide提供方便
但是原则上也不允许修改

mutable

【在 a*****e 的大作中提到】
: 这个例子只能说明 mutable by default 需要遵守一定规则 (使用 non-escaping 局部
: 变量)才能安全,想用它来例证 mutable by default 好?逻辑上讲不通。
: 为什么我说 non-escaping,因为如果使用 closure 捕捉局部变量成为环境变量,就
: escape 了它们原先的定义域,mutation 会导致意想不到的状况,和使用全局 mutable
: 变量类似。

x*h
发帖数: 72
23
不懂,看起来很猛的样子。
l**********n
发帖数: 8443
24
变量有两种解释:
1)associative binding between a name and an expression
2) memory location
第一种是小学就学会了
q*c
发帖数: 9453
25
int X = 2
int Y = 3
X = X xor y
Y= X xor y
X = X xor y
经典面试题, 当年一个 principle 面试我,要我交换两个变量(用无脑的方法)。
这样的羞辱哥怎么能接收?马上就用这个把他跪了。

【在 N******K 的大作中提到】
: swap 不用临时变量 怎么实现?
: 杂技演员 两个手里的东西 往天上一扔 然后互相换位置?
: 就算这样 这个“天”就是临时存储空间

1 (共1页)
进入Programming版参与讨论
相关主题
OOP里面的Object其实是actor粉FP的人是因为把电脑想象成图灵机了
mutating input argument不应该鼓励吧FP 之我见 (长)
python 区别于其他语言的根本?iq 140的人说小时候无法理解变量,需要妈妈帮忙
criticism of ScalaFP更接近人的思维
关于FP问个c++问题
对 (im)mutability 的误解和深度理解没人觉得python的string是immutable不爽吗?
Python Q: function pass in struct pointer, come back with data filled从今天开始起,学C++!
go也是三种paradigm混合的语言return value of a python function...
相关话题的讨论汇总
话题: fp话题: 变量话题: 函数话题: 语言话题: mutable