作者godfat (godfat 真常)
看板Ruby
标题Re: [心得] functional programming
时间Sun Sep 23 01:55:45 2007
回一下好了 XD
※ 引述《contagious (布谷饱吃不堡)》之铭言:
: 後者的扩充版本不用写得这麽可怕吧?用到 metaprogramming 太夸张了
: def combine *args
: result = []
: args.first.size.times do |i|
: tmp = 0
^^^^^^^ 这样就写死初值了 :o
看看有没有办法用 inject 的方式?
不然就要分开处理,那实在很麻烦...
: args.size.times do |j|
: tmp += args[j][i]
: end
: result << tmp
: end
: result
: end
: 不过这样的易读性就没有原来没扩充之前高了
: BTW 一行的版本可以写成这样
: def *args
: args.transpose.map.inject(&:+)
: end
: transpose 是个超有用的 method,很多原本该用 index 或是 Generator 的东西
: 用了 transpose 就可以轻易的转成 interator 就解决了
之前没注意到这个 method :p
: 基本上, Array index 的方式效率较高且比较具有扩充性的,而 inner iterator 则
: 易於理解的。(刚好和原 po 的看法相反?)
没有相反吧 @_@
我是说 meta-programming 的效能不会好,不是说 array index.
至於 inner iterator 的理解难度上,就跟你後段(1)的意思差不多,
对熟悉的人来说容易理解,对不熟悉的人反而比较难理解。
: 用 Array index 的话,随便你要取哪个元素来运算都行,所以基本上扩充性是无限制
: 的,而用 inner iterator 的话,就有不能平行走过两个阵列这种限制。
我指的不容易扩充,应该是指要扩充比较辛苦,而不是有没有办法做到。
不过这也是非常看情况就是了,不可能每个情况下都是如此。
(1)
: 而所谓 inner iterator 易於理解,并不是指每一个人都比较看得懂这种写法,而是指
: 它的逻辑比较明显。通常看不懂这种写法的,并不是不了解程式的逻辑,而是语法不熟
: 。这就好像说我们熟悉中文的人,因为英文不好所以觉得用英文写的论文比较难懂。
: 其实英文这个语文并没有错,甚至英文在逻辑和精确度上都比中文来得好,只是我们不
: 习惯罢了。
不过这不是语法问题 :o 相信大家都知道那是合语法的 :p
自然语言的语法远远复杂於程式语言 @_@
所以在自然语言里确实比较有可能是语法问题 XD
--
#!/usr/bin/ruby [露比] /Programming (Kn|N)ight/ 看板《Ruby》
# if a
dog nailed
extra legs that
http://webptt.com/cn.aspx?n=bbs/Ruby/index.html
#
walks like an octopus, and Welcome ~
Ruby@ptt~
#
talks like an octopus, then
◢█◣ http://www.ruby-lang.org/
# we are happy to treat it as
█ http://www.ruby-doc.org/
# if it were
an octopus.
◥ ◤ http://www.rubyforge.org/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18