最新评论

共3页: 1 2 3 下一页 
wanglihua 2010-01-08 18:48
好东西,很实用!
James.Ying 2009-12-31 16:42
额。。。。先前我写过了,不过实际运用中还没有用
Leven 2009-12-31 16:33
呃,好像我的文章只是借用了python中decorator的思想,其实和python一点关系都没有. 从核心实现来看,本文是调用了python的decorator实现,而我的文章中描述的是[b]在c#中实现了类似python中decorator的语法[/b],两者是完全不同的.
芭蕉 2009-12-28 20:44
@Jeffrey Zhao 嗯,只是感觉这个python module还不错
Jeffrey Zhao 2009-12-28 18:11
F#毕竟是函数式编程语言,用类C的语言去衡量其可读性是不可取滴。
芭蕉 2009-12-28 16:44
@极品菜鸟 主要就是介绍下这个module啊
极品菜鸟 2009-12-28 16:25
请问:你想说什么?
芭蕉 2009-12-28 10:50
@地狱门神 嗯,可读性更好一些。 我习惯用括号了...
地狱门神 2009-12-28 01:03
其实这么写就行了 [code=csharp] let f = fun () -> printf "hello" printfn "world" let makewithdraw (balance:int) = let refb = ref balance fun amount -> if !refb >= amount then refb := !refb-amount !refb else failwith "Insufficient funds" [/code]
欧阳自远 2009-09-12 11:41
用这种方法解压有密码保护的zip压缩包时能不能不弹出密码输入窗口
Anders Cui 2009-08-18 19:11
函数是一等公民,这个也应该谈谈吧?
芭蕉 2009-08-18 13:49
@Jeffrey Zhao 呵呵,简历上啥东西最不可信,我最不信的就是精通啥啥啥
芭蕉 2009-08-18 13:48
@Ivony... 谢谢指教,不过有些专用名词我不喜欢翻译过来,尤其是专有名词。。。
韦恩卑鄙 2009-08-18 13:33
我是精分函数式编成 "精分"=>"精神分裂"
Jeffrey Zhao 2009-08-18 13:23
精通函数式编程……
Ivony... 2009-08-18 12:34
看别人用另一种语言和另一个视点来写同一个东西还真是有意思。
Ivony... 2009-08-18 12:30
Higher-Order function 就叫做高阶函数吧,虽然中文翻译不统一(泛函、算子)问题是英文也是怪怪的。 Currying Fuction:柯理化函数
芭蕉 2009-08-13 21:44
@cokkiy 慢慢习惯了就好了,C#不也变的越来越不直观了
cokkiy 2009-08-13 21:06
其他语言看习惯了,看这种function类型的语言,好费经啊
Anders Cui 2009-08-13 17:19
[quote]Jeffrey Zhao:我也打算写一个简单的F# by Example系列了。[/quote] 我准备写个小系列,介绍下F#的一些有特色的东东
芭蕉 2009-08-13 16:48
@Jeffrey Zhao 期待你的大作 对的,用比懂更难一些。希望我说了函数后能让大部人先能看懂F#的函数(当然你除外啦,你己经很懂了,呵呵,要不然又要说我当别人是小白了)
Jeffrey Zhao 2009-08-13 16:26
对了,话说我至今觉得F#有些难懂难用,部分特性很难懂很难用。 或者说,把F#代码直接不假思索的读,可以看懂这些意思,但是如果你要写出API来就不容易了。 嗯,那么更确切的应该说是,懂比用容易——啊,但我也没说懂就容易了……。
Jeffrey Zhao 2009-08-13 16:19
我也打算写一个简单的F# by Example系列了。
Anders Cui 2009-08-13 16:07
很不错,赞!
Anders Cui 2009-08-12 14:53
@rex xiang 老兄写得相当不错,现在为何不写点F#的东东呢?
rex xiang 2009-08-12 14:27
[quote]Anders Cui: @芭蕉 这个例子看来不适合作为学习F#的快速入门:) 该筛法有个很重要的特点就是递归有个上限sqrt(n),代码没有反映出来。 以前我曾写过一篇关于这个筛子的文章,我的写法几乎还是按命令式语言的风格来写的,但是在评论里面有个朋友给出了非常好的代码,我觉得很好地体现了列表操作和递归的特点: [code=csharp] let sqrt_int x = x |> float |> sqrt |> int let find_prime max = let rec filter prime numbers = match numbers with ...[/quote] 咦?这不是我初学F#的时候(当然现在还是初学者)写的东西么?有人认可俺实在是太荣幸老...
Jeffrey Zhao 2009-08-11 23:25
@Anders Cui erlang没有如C#那样的容器,它是真的no side effect的,它的list也是F#的list形式,毕竟是函数式语言。不过拷贝是逃不掉的。 erlang的拷贝,据说是为了并发性和容错,但是我并没有理解这一点,因为如其他语言/平台,只是做到了immutable也已经够了,no sharing这一点过了。 这也是erlang虽然并发强,适合做网络程序,但是做不了计算密集型应用的原因,因为什么都是拷贝来拷贝去,比一个字长的引用拷贝费时多了。
Jeffrey Zhao 2009-08-11 23:21
@芭蕉 它不是copy on write,erlang中没有write只有bind(对一个变量bind以后再也不可变),它是任何传递都是copy,除非是很大的二进制对象才会传递引用。
Anders Cui 2009-08-11 23:10
[quote]Jeffrey Zhao: 对了,我刚才忽然意识到我犯了一个错误。 Erlang的性能问题不在于immutable(immutable理论上性能会有问题但是实际上基本上不成问题),而在于no sharing。 no sharing导致大量数据会拷来拷去,性能影响在这里。[/quote] 但是,immutable只是说某个值本身不能修改,在程序中值的修改是客观需要的。比如对列表来说,你对它添加或移除一个元素,值也是修改了啊,如果此时是你说的no sharing,性能就会有问题吧。
芭蕉 2009-08-11 22:57
[quote]Jeffrey Zhao: 对了,我刚才忽然意识到我犯了一个错误。 Erlang的性能问题不在于immutable(immutable理论上性能会有问题但是实际上基本上不成问题),而在于no sharing。 no sharing导致大量数据会拷来拷去,性能影响在这里。[/quote] 对Erlang不熟,但如果按你说的,它是按copy on write pattern实现的immutable的话,那拷来拷去确实很影响性能
Jeffrey Zhao 2009-08-11 22:18
对了,我刚才忽然意识到我犯了一个错误。 Erlang的性能问题不在于immutable(immutable理论上性能会有问题但是实际上基本上不成问题),而在于no sharing。 no sharing导致大量数据会拷来拷去,性能影响在这里。
Jeffrey Zhao 2009-08-11 20:46
@芭蕉 我可没有说过immuable意味着性能差,我也同意immutable如果操作适当,性能的确不会差。 但是erlang是“必须、完全immutable”,也就是说它由不得程序员,所以有些时候性能势必会差一些。 // 我喜欢争论,多多包涵,呵呵。
芭蕉 2009-08-11 20:30
我真不想争论这个东西,前面说过了,这个争论真的很激烈,各有各有好处。但如果认为immutable就意味着性能差,那我也强烈不认同,immutable类型,如果操作适当,性能并不一定会差。
Jeffrey Zhao 2009-08-11 20:00
@芭蕉 C#里的基本类型本就是immutable的,int, long, double, datetime哪个不是immutable的?struct的copy特性,本来就非常倾向于immutable,这是语言/平台设计决定的。 其实C#和F#都是把immutable与否交给了程序员,两者是一样的,F#并不占优势。 至于你说C#如果放在现在设计……我认为如果还是和如今C#语言一样的目的,那么必然是mutable的,何况F#都是可以mutable的。 因为如何设计和“年份”无关,只和作用有关。immutable并行、FP的产物,我这里举一些流行语言的例子: F#是FP,新语言,immutable,可mutable。 C#不是FP,旧语言,mutable。 Erlang,for parallel,很旧的语言了,immutable。 Axum,新语言,mutable。 Java平台上的Groovy和Scala,新语言,mutable。 值得一提的是Axum和Scala,前者专为并行设计,后者的Actor模型是一大特色,几乎也可以说是for parallel的语言,但它们也都是mutable的,或者说,他们把灵活性留给了程序员。 所以你说“如果C#放到现在就mutable”的说法,我找不到事实根据和理论基础,我不同意。 在并行世界里,我也不接受完全immutable,因为很多时候程序员需要灵活性,明白自己什么时候可以用mutable的,immutable丧失共享内存的便利(和性能),也不一定被看好。 例如如今Erlang界,讨论的很凶的东西之一就是Erlang Style Programming(一种编程风格,而并不一定是Erlang本身),Erlang有一个很死板的特点就是完全immutable,统统拷贝,有损性能。
风过 无痕 2009-08-11 19:54
我觉得,一门语言,优缺点对比,比较重要。即使优点很多,如果有些缺点,让某些人或某些业务,不能接受,那么也不适合这个人来开发。开发本来就是技术活,再加上代价,权衡利弊,就没有开发的必要了。为了学习而学习,是学生年代的事了。很多人过了那个阶段
芭蕉 2009-08-11 19:41
@Anders Cui 嗯,我只是为了通过例子说明一些F#的基本语法,并没有考虑该算法的最优实现。 而且我写的里面用到了If ... else, 按照functional programming style的观点,是不应该用这个的,应该用Pattern Matching 你贴的实现比较能反映函数式编程的style,不过我不大喜欢使用@来联接两个List,这个一般来说在性能上要比在List前面插入一个新元素差的多,尤其是前面的List比较大时
芭蕉 2009-08-11 19:32
[quote]Jeffrey Zhao: @芭蕉 不要“默认”持反对意见的人是小白比较好吧,这里也有几个搞F#的人了,而且我是提出质疑和自己的看法,没有反对你的观点。 我不是F#和函数式编程的初学者,我甚至算是有点“专注于并行计算”的吧。对于F#对并行计算,我在生产环境下都在用。 我的意思是,我也知道F#的优势,但是我并不觉得F#和函数式编程有你说得那么好,或者说那么“自然而然”地就说好就好了。 就比如,像数学公式一样表达自己思想,难道就是“专注”了吗?这是需要跟进一步解释的。还有,为什么说函数式编程像“数学公式一样”也是个没有解释清楚的东西。 至于生产力问题,我始终认为F#是一门难学难用的语言,很难像C#一样成为大众型语言。 还有immutable,F#和C#的区别只是默认情况下是不是immutable的。F#在并行计算上的优势,一个重要的方面是async workflow,但我认为不是immutable。 因为F#也可以做到mutable,C#也可以写成immutable(不改不就行了,呵呵),immutable的确对并行计算有优势,但是并不是F#带来的——一个默认特性而已。[/quote] 没默认谁是小白,至于F#,也并不是要来取代C#的,各有各的长处吧,比如说在金融,数学计算方面F#确实有它的长处,但如果是用F#去搞GDI开发,我想也没几个人愿意去搞吧。 至于immutable和mutable的问题,这个本来争论就很激烈,有很多人甚至极端的认为mutable是邪恶的,总的来说现在是immutable比较占优势吧,我相信如果C#是现在也设计出来的,它的基本类型也应该全是immutable的。
cokkiy 2009-08-11 19:29
函数式语言与我们大部分程序员日常接触的语言是完全不同的东西,如果你喜欢,可以去学习,不喜欢,就不用管它,没必要说些无聊的话
Anders Cui 2009-08-11 18:25
@芭蕉 这个例子看来不适合作为学习F#的快速入门:) 该筛法有个很重要的特点就是递归有个上限sqrt(n),代码没有反映出来。 以前我曾写过一篇关于这个筛子的文章,我的写法几乎还是按命令式语言的风格来写的,但是在评论里面有个朋友给出了非常好的代码,我觉得很好地体现了列表操作和递归的特点: [code=csharp] let sqrt_int x = x |> float |> sqrt |> int let find_prime max = let rec filter prime numbers = match numbers with | [] -> prime | head::_ when head = 1 -> filter [] numbers.Tail | head::_ when head > (sqrt_int max) -> prime @ numbers | _ -> numbers.Tail |> List.filter (fun i -> (i % numbers.Head) > 0) |> filter (prime @ [numbers.Head]) filter [] [1..max] 120 |> find_prime |> printfn "%A" [/code]
Jeffrey Zhao 2009-08-11 18:19
[quote]♂风车车.Net: 虽然,F#出现已经有那么久. 但是似乎目前并没有 利用F#写的出来东西出现. 也许我孤陋寡闻吧! 所以,F#到底如何?不清楚!也许以后在某个方面作为比较大. 估计在我当程序员的这些年里,是看不到它的作为![/quote] F#的不少特性是很值得提倡的,只是有些难以掌握,不过学一个语言重要的是学它的思想。例如workflow,例如比C#还要完整的code as data。 F# web toolkit便是基于后者,可以写F#代码,直接得到JS代码,异步AJAX等等,统统在一起了 至于前者,你可以看看基于前者实现的async workflow:[url]http://www.infoq.com/presentations/Concurrent-Programming-with-Microsoft-F-Amanda-Laucher[/url]
Jeffrey Zhao 2009-08-11 18:05
@芭蕉 不要“默认”持反对意见的人是小白比较好吧,这里也有几个搞F#的人了,而且我是提出质疑和自己的看法,没有反对你的观点。 我不是F#和函数式编程的初学者,我甚至算是有点“专注于并行计算”的吧。对于F#对并行计算,我在生产环境下都在用。 我的意思是,我也知道F#的优势,但是我并不觉得F#和函数式编程有你说得那么好,或者说那么“自然而然”地就说好就好了。 就比如,像数学公式一样表达自己思想,难道就是“专注”了吗?这是需要跟进一步解释的。还有,为什么说函数式编程像“数学公式一样”也是个没有解释清楚的东西。 至于生产力问题,我始终认为F#是一门难学难用的语言,很难像C#一样成为大众型语言。 还有immutable,F#和C#的区别只是默认情况下是不是immutable的。F#在并行计算上的优势,一个重要的方面是async workflow,但我认为不是immutable。 因为F#也可以做到mutable,C#也可以写成immutable(不改不就行了,呵呵),immutable的确对并行计算有优势,但是并不是F#带来的——一个默认特性而已。
芭蕉 2009-08-11 17:55
@jeff_sh 函数式语言己经和C语言是两个大家庭的东西了,相差当然很大
芭蕉 2009-08-11 17:53
[quote]Jeffrey Zhao: immutable这个问题我的看法是,C#你可以写成immutable的(不去改不就可以了),F#也可以通过mutable关键字或ref的方式来mutable,所以这个好处有限。 函数式编程是否可以简化程序,专注算法实现我也不是很清楚,有没有更详细的解释?[/quote] 简化程序我主要指的是借助强大的type inference,我们可以少敲不少东西,这样不就变相提高生产率了?至少于专注算法实现,一门函数式语言,借助于high order functions,我们可以像在写数学公式一样表达自己的思想,难道这不算专注么? 至于immutable的问题,等以后看到F#对并行计算的支持,你就明白了
♂风车车.Net 2009-08-11 17:47
虽然,F#出现已经有那么久. 但是似乎目前并没有 利用F#写的出来东西出现. 也许我孤陋寡闻吧! 所以,F#到底如何?不清楚!也许以后在某个方面作为比较大. 估计在我当程序员的这些年里,是看不到它的作为!
芭蕉 2009-08-11 17:45
@PXDKK 无所谓跟风不跟风,我觉得学一门语言主要是学一种思想
Jeffrey Zhao 2009-08-11 17:32
[quote]PXDKK : 微软的创新是无意义的!!! 我不跟风[/quote] 你还不咋了解,怎么就觉得无意义的呢? 我觉得跟F#比跟一些Silverlight有价值的多呢。
Jeffrey Zhao 2009-08-11 17:32
[quote]芭蕉: 比如F#里面的基本类型基本上全是immutable的,可以很好的适用于并行计算, 比如F#有强大的类型推断机制,并且是一门函数式语言,这可以简化我们的程序,让我们专注于算法的实现。 再比如,F#是运行于CLR之上的,这意味着它可以使用丰富的.net库函数(当然这个只对.net程序员而言)[/quote] immutable这个问题我的看法是,C#你可以写成immutable的(不去改不就可以了),F#也可以通过mutable关键字或ref的方式来mutable,所以这个好处有限。 函数式编程是否可以简化程序,专注算法实现我也不是很清楚,有没有更详细的解释?
MidNight 2009-08-11 17:27
能不能先来个max()类型的简单的看看先? 搞这么多-><-的
游吟男孩 2009-08-11 16:23
函数式语言.......,关注ing....
共3页: 1 2 3 下一页