由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - scala写个loop老难了
相关主题
Haskell很难学。。大家有没有觉得Scala不如Haskell美?
对 (im)mutability 的误解和深度理解怎么这里这么多人学python
模板算是纯FP吗也谈OOP跟FP之争
Scala's type systemjava 8就是一坨屎
我还是认为scala的程序员水平高python代码写成这样,什么鬼阿。
王垠新文 为Java说句公道话关于FP
functional programming 哪本书经典适合入门粉FP的人是因为把电脑想象成图灵机了
functional programming why?functional programming?
相关话题的讨论汇总
话题: scala话题: takewhile话题: haskell话题: fp话题: print
进入Programming版参与讨论
1 (共1页)
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

相关主题
王垠新文 为Java说句公道话大家有没有觉得Scala不如Haskell美?
functional programming 哪本书经典适合入门怎么这里这么多人学python
functional programming why?也谈OOP跟FP之争
进入Programming版参与讨论
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)

相关主题
java 8就是一坨屎粉FP的人是因为把电脑想象成图灵机了
python代码写成这样,什么鬼阿。functional programming?
关于FPHaskell 大神请指教我这段程序为什么out of memory
进入Programming版参与讨论
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怎么写呀?

相关主题
学FP不是为了写代码, 而是为了优秀的架构.对 (im)mutability 的误解和深度理解
有没有喜欢haskell的同学模板算是纯FP吗
Haskell很难学。。Scala's type system
进入Programming版参与讨论
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)

1 (共1页)
进入Programming版参与讨论
相关主题
functional programming?我还是认为scala的程序员水平高
Haskell 大神请指教我这段程序为什么out of memory王垠新文 为Java说句公道话
学FP不是为了写代码, 而是为了优秀的架构.functional programming 哪本书经典适合入门
有没有喜欢haskell的同学functional programming why?
Haskell很难学。。大家有没有觉得Scala不如Haskell美?
对 (im)mutability 的误解和深度理解怎么这里这么多人学python
模板算是纯FP吗也谈OOP跟FP之争
Scala's type systemjava 8就是一坨屎
相关话题的讨论汇总
话题: scala话题: takewhile话题: haskell话题: fp话题: print