作者godfat (godfat 真常)
看板java
标题Re: purely functional (原 [问题] SCJP6.0)
时间Wed Aug 5 12:00:47 2009
※ 引述《Schelfaniel (Schelfaniel)》之铭言:
: ※ 引述《godfat (godfat 真常)》之铭言:
: : 1. 如果一个 expression 的 return value 没被用上,则可以从程式中
: : 完全移除,也是就是完全不呼叫。
: 这个有点难,像是 "印 debug 讯息" (这算 Statement? ) :QQ
所有的 IO 都有 side-effect, 因此顺序不能任意交错,也不能被移除。
是不是 statement 端看有没有回传值,在没有 side-effect 的程式里,
也就是 purely functional 里,只有 expression, 没有 statement.
或是说 statement 和 expression 其实是同一件事..
: : 2. referential transparency. 即 if x == y then f(x) == f(y)
: f(x) = random 0..x 的话?
random 本身也有 side-effect, 比方说 pseudo-random number generator,
至少需要一个 seed, 每一次呼叫 seed 都会被改变,因此有 side-effect.
当然也不可能符合 if x == y then f(x) == f(y)
: 这很难,Java Object 内含一堆状态,
: 基本上要使用到 Java Object,不可能完全不动到,
: 除非,每一次都 clone 出来再使用,但这样效能不好,
: 或许会衍生出其他的问题。
: 所以 clojure 要基於 Java 之上,基本上应该是没可能成为
: 纯的函数语言了
物件导向本身就是以 state 为基准在做的,希望让 fp 与 oo 混和,
我看到现在是觉得 scala 做得最漂亮。不过要完全混和,应该是不可能的...
看起来 clojure 这点不是做得很好的样子?
其实我觉得 fp 还是需要 static typing 的,lisp 这样不是很适合...
--
Hear me exalted spirits. Hear me, be you gods or devils, ye who hold
dominion here:
I am a wizard without a home. I am a wonderer seeking refuge.
Sacrifice
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.128.121.85
1F:推 PsMonkey:看不懂也推... (这真的是跟 Java 有关吗? [泪目]) 08/05 12:08