p*****2 发帖数: 21240 | 1 这个loop用C/Java等等很容易写。scala就不行了,只能需求非for的方法了。
for (int i = 1; i <= n; i *= m) |
A*******t 发帖数: 443 | 2 haskell里面就没有for loop这个东西
【在 p*****2 的大作中提到】 : 这个loop用C/Java等等很容易写。scala就不行了,只能需求非for的方法了。 : for (int i = 1; i <= n; i *= m)
|
t***a 发帖数: 416 | 3 用变量是罪恶的。。。
【在 p*****2 的大作中提到】 : 这个loop用C/Java等等很容易写。scala就不行了,只能需求非for的方法了。 : for (int i = 1; i <= n; i *= m)
|
p*****2 发帖数: 21240 | 4
这个是呀。所以我奇怪写起代码了,是否爽。
【在 A*******t 的大作中提到】 : haskell里面就没有for loop这个东西
|
p*****2 发帖数: 21240 | 5
听说scala内部的library全是imperative的。
【在 t***a 的大作中提到】 : 用变量是罪恶的。。。
|
p*****2 发帖数: 21240 | 6 FP里没有for,while这个我理解,因为要immutability。但是为什么python, ruby这种
语言也把for给阉割了呢?是因为学习FP语言的结果吗? |
A*******t 发帖数: 443 | 7 用fold啊
【在 p*****2 的大作中提到】 : FP里没有for,while这个我理解,因为要immutability。但是为什么python, ruby这种 : 语言也把for给阉割了呢?是因为学习FP语言的结果吗?
|
p*****2 发帖数: 21240 | 8
感觉还不如用while方便。
【在 A*******t 的大作中提到】 : 用fold啊
|
t***a 发帖数: 416 | 9 至少我看过的基本都是。。。。。。写的都跟java似的,据说这样能让他们更好地掌控
performance
【在 p*****2 的大作中提到】 : : 感觉还不如用while方便。
|
p*****2 发帖数: 21240 | 10
是这样子的。所以我还没搞明白为什么那么强调纯FP了。感觉对纯FP的性能心里没底。
这也是为什么混合型的更流行的原因吧。
【在 t***a 的大作中提到】 : 至少我看过的基本都是。。。。。。写的都跟java似的,据说这样能让他们更好地掌控 : performance
|
|
|
t***a 发帖数: 416 | 11 性能不是总那么重要,而且scala的fp性能也不算太差
目前我能感受到的fp的好处就是much fewer bugs.....
【在 p*****2 的大作中提到】 : : 是这样子的。所以我还没搞明白为什么那么强调纯FP了。感觉对纯FP的性能心里没底。 : 这也是为什么混合型的更流行的原因吧。
|
p*****2 发帖数: 21240 | 12
如果用纯FP来写,感觉开发效率也未必高。比如没有loop,需要recursion,而且为了
防止stack overflow要写尾递归,开发效率应该就降低不少才对。感觉混合写比较好。
scala确实代码量下降,相应的bug也会减少。这个确实是个大优势。
【在 t***a 的大作中提到】 : 性能不是总那么重要,而且scala的fp性能也不算太差 : 目前我能感受到的fp的好处就是much fewer bugs.....
|
t***a 发帖数: 416 | 13 我只有在大量使用java lib的时候才使用混合模式,其他时候使用纯fp模式
现在开发效率的确可能略有降低,但也绝对没有降低不少
【在 p*****2 的大作中提到】 : : 如果用纯FP来写,感觉开发效率也未必高。比如没有loop,需要recursion,而且为了 : 防止stack overflow要写尾递归,开发效率应该就降低不少才对。感觉混合写比较好。 : scala确实代码量下降,相应的bug也会减少。这个确实是个大优势。
|
A*******t 发帖数: 443 | 14 嗯,haskell的performance tune我觉得学两个pl的phd也不懂。
【在 p*****2 的大作中提到】 : : 如果用纯FP来写,感觉开发效率也未必高。比如没有loop,需要recursion,而且为了 : 防止stack overflow要写尾递归,开发效率应该就降低不少才对。感觉混合写比较好。 : scala确实代码量下降,相应的bug也会减少。这个确实是个大优势。
|
p*****2 发帖数: 21240 | 15
纯FP的优势是不是就是concurrency上? 如果开发效率不能提升的话。
【在 t***a 的大作中提到】 : 我只有在大量使用java lib的时候才使用混合模式,其他时候使用纯fp模式 : 现在开发效率的确可能略有降低,但也绝对没有降低不少
|
t***a 发帖数: 416 | 16 如果写多线程的东西,那纯fp结合actor的开发效率是要高很多的,即便是在我两三年
前初学的时候, 广泛使用immutable collection让bug少了非常多。可惜我就做过一两
个大量涉及多线程的项目,这方面体验不深。
对于一般程序,如果思路转变过的话,fp的优势在于易读,bug-free(只要想好,写出
来基本上就是对的)
尤其是实现算法的时候,你知道,好些算法的描述其实是更贴近fp的
【在 p*****2 的大作中提到】 : : 纯FP的优势是不是就是concurrency上? 如果开发效率不能提升的话。
|
p*****2 发帖数: 21240 | 17
写算法貌似空间使用会比imperative高不少。
【在 t***a 的大作中提到】 : 如果写多线程的东西,那纯fp结合actor的开发效率是要高很多的,即便是在我两三年 : 前初学的时候, 广泛使用immutable collection让bug少了非常多。可惜我就做过一两 : 个大量涉及多线程的项目,这方面体验不深。 : 对于一般程序,如果思路转变过的话,fp的优势在于易读,bug-free(只要想好,写出 : 来基本上就是对的) : 尤其是实现算法的时候,你知道,好些算法的描述其实是更贴近fp的
|
a*****e 发帖数: 1700 | 18 看你要这个循环来干什么了,Haskell 里面也就是一句话的事儿
let l = 1 : map (*m) l in takeWhile (<=n) l
【在 p*****2 的大作中提到】 : 这个loop用C/Java等等很容易写。scala就不行了,只能需求非for的方法了。 : for (int i = 1; i <= n; i *= m)
|
p*****2 发帖数: 21240 | 19
比如就是print(i)
【在 a*****e 的大作中提到】 : 看你要这个循环来干什么了,Haskell 里面也就是一句话的事儿 : let l = 1 : map (*m) l in takeWhile (<=n) l
|
t***a 发帖数: 416 | 20 (0 to n).foreach(your_func)
如果你就想要个自然数的seq的话。。。。
【在 p*****2 的大作中提到】 : : 比如就是print(i)
|
|
|
p*****2 发帖数: 21240 | 21
不是自然数, 比如需要pow(2,x) x from 0 , until 2^x <=n
【在 t***a 的大作中提到】 : (0 to n).foreach(your_func) : 如果你就想要个自然数的seq的话。。。。
|
t***a 发帖数: 416 | 22 你这个做法就更多了。。。随便写个fold嘛
【在 p*****2 的大作中提到】 : : 不是自然数, 比如需要pow(2,x) x from 0 , until 2^x <=n
|
p*****2 发帖数: 21240 | 23
我想知道的事 Scala 的for可不可以做到 因为Scala把for功能加强大了
不然的话用while也很容易
Fold你gei写一个看看?
【在 t***a 的大作中提到】 : 你这个做法就更多了。。。随便写个fold嘛
|
A*******t 发帖数: 443 | 24 haskell下面就一行
someFunction n = takeWhile (<=n) [2^x | x <- [0..]]
对不起,不太会Scala
【在 p*****2 的大作中提到】 : : 我想知道的事 Scala 的for可不可以做到 因为Scala把for功能加强大了 : 不然的话用while也很容易 : Fold你gei写一个看看?
|
p*****2 发帖数: 21240 | 25
这个看起来有空间的损耗 我感觉类似的scala需要用stream了
【在 A*******t 的大作中提到】 : haskell下面就一行 : someFunction n = takeWhile (<=n) [2^x | x <- [0..]] : 对不起,不太会Scala
|
A*******t 发帖数: 443 | 26 haskell是个lazy的语言啊,追随大牛的指导看了一下Scala的stream,好想很有趣啊。
【在 p*****2 的大作中提到】 : : 这个看起来有空间的损耗 我感觉类似的scala需要用stream了
|
p*****2 发帖数: 21240 | 27
比如实现这个
for(int i=1;i<=n;i*=m) println(i)
你用haskell貌似要生成所有的才能打印吧?空间消耗log(n), 如果C循环就是O(1)。
【在 A*******t 的大作中提到】 : haskell是个lazy的语言啊,追随大牛的指导看了一下Scala的stream,好想很有趣啊。
|
A*******t 发帖数: 443 | 28 记得haskell的lazy是用closure来实现的吧,所以空间消耗还是O(1)。
【在 p*****2 的大作中提到】 : : 比如实现这个 : for(int i=1;i<=n;i*=m) println(i) : 你用haskell貌似要生成所有的才能打印吧?空间消耗log(n), 如果C循环就是O(1)。
|
p*****2 发帖数: 21240 | 29
你如果把print也加进去,应该用haskell怎么写呀?
【在 A*******t 的大作中提到】 : 记得haskell的lazy是用closure来实现的吧,所以空间消耗还是O(1)。
|
A*******t 发帖数: 443 | 30 print $ takeWhile (<10000) [x^2 | x <-[1..]]
【在 p*****2 的大作中提到】 : : 你如果把print也加进去,应该用haskell怎么写呀?
|
|
|
A*******t 发帖数: 443 | 31 如果想要每一个元素占一行的话,这么写
mapM_ print (takeWhile (<10000) [x^2 | x <-[1..]])
or
mapM_ print $ takeWhile (<10000) [x^2 | x <-[1..]]
【在 A*******t 的大作中提到】 : print $ takeWhile (<10000) [x^2 | x <-[1..]]
|
p*****2 发帖数: 21240 | 32
这个看起来不错。如果想进行很多计算呢, 不单单是print。是不是定义一个函数就可
以了?
【在 A*******t 的大作中提到】 : 如果想要每一个元素占一行的话,这么写 : mapM_ print (takeWhile (<10000) [x^2 | x <-[1..]]) : or : mapM_ print $ takeWhile (<10000) [x^2 | x <-[1..]]
|
A*******t 发帖数: 443 | 33 嗯,然后map或者mapM一下
【在 p*****2 的大作中提到】 : : 这个看起来不错。如果想进行很多计算呢, 不单单是print。是不是定义一个函数就可 : 以了?
|
t***a 发帖数: 416 | 34 for也行啊
for(i <- 0 until 1000 if scala.math.pow(2,i) < 1000) yield scala.math.pow(2,
i)
你这个最后小于n的挺讨厌的,我再写个fold的啊,其实硬写这样的代码也没啥意思。
。。你到底想证明什么呢?
List.range(1,200).foldLeft(List(1))((result, e) => (result.head*2)::result).
filter(_ < 1000)
【在 p*****2 的大作中提到】 : : 这个看起来不错。如果想进行很多计算呢, 不单单是print。是不是定义一个函数就可 : 以了?
|
p*****2 发帖数: 21240 | 35
2,
).
这样的话还是循环1000次。本来用C的for是可以log(1000)的。
我不是想证明什么。只是想知道scala的for能不能做到类似的效果。最简单的话还是用
个while就可以了。
【在 t***a 的大作中提到】 : for也行啊 : for(i <- 0 until 1000 if scala.math.pow(2,i) < 1000) yield scala.math.pow(2, : i) : 你这个最后小于n的挺讨厌的,我再写个fold的啊,其实硬写这样的代码也没啥意思。 : 。。你到底想证明什么呢? : List.range(1,200).foldLeft(List(1))((result, e) => (result.head*2)::result). : filter(_ < 1000)
|
t***a 发帖数: 416 | 36 嗯。。。要是想完全控制。。。。fp就有伤脑了
【在 p*****2 的大作中提到】 : : 2, : ). : 这样的话还是循环1000次。本来用C的for是可以log(1000)的。 : 我不是想证明什么。只是想知道scala的for能不能做到类似的效果。最简单的话还是用 : 个while就可以了。
|
p*****2 发帖数: 21240 | 37
貌似上边那个haskell的例子还不错。不知道scala能不能完成类似的。
【在 t***a 的大作中提到】 : 嗯。。。要是想完全控制。。。。fp就有伤脑了
|
p*****2 发帖数: 21240 | 38 来个summary吧。
这个问题老老实实用while就完了。没什么更好的办法。 |
E*****m 发帖数: 25615 | 39
這個就該用 recursion
【在 p*****2 的大作中提到】 : 这个loop用C/Java等等很容易写。scala就不行了,只能需求非for的方法了。 : for (int i = 1; i <= n; i *= m)
|