Re: [心得] 最大公約數
※ 引述《yzugsr (Bird)》之銘言:
: require 'rational' # Integer#gcd need this in ruby 1.8.7
: puts ARGV.map(&:to_i).inject(&:gcd)
: 推 SansWord:為什麼是functional programming style? 願聞其詳。 04/25 09:04
我覺得用上map, inject(fold)這些higher order function
而不用迴圈及變數去記住運算的狀態
是比較接近FP的寫法....
當然這只是FP的一角而已,或許不能稱為FP style
對於「將程式參數(argv)中的數字全部進行gcd運算」
參考一下Scala及Haskell可能的實作,結構跟上面的Ruby code會很相似
In Scala: (stdlib沒有gcd,自幹一下)
object Main {
def main(args: Array[String]) {
def gcd(a: Int, b: Int): Int = if (b==0) a else gcd(b, a%b)
println(args.map(_.toInt).reduceLeft(gcd))
}
}
In Haskell:
import System.Environment
main = do
argv <- getArgs
print $ foldl1 gcd $ map (read::String->Int) argv
啊....用Ruby寫最短....冏....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.180.162
推
04/27 21:22, , 1F
04/27 21:22, 1F
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章