Rubyで話すようにしてみた
話すようにプログラムするPythonチュートリアル - なんたらノート 第二期
を、Rubyで書いてみた。
def is_prime_number(n) (2..n-1).find {|m| n % m == 0 } == nil end def prime_numbers_until(limit) (2..limit).select {|n| is_prime_number n} end print (prime_numbers_until 100).join ','
最適化後(ただし、コピーのジェネレータ置き換えは含まず)
$prime_numbers = [2] $max_known_number = 2 def expand_prime_number_dict_to limit ($max_known_number+1..limit).each {|n| $prime_numbers.push n if is_prime_number n $max_known_number = n } end def is_prime_number n return $prime_numbers.include? n if n <= $max_known_number (prime_numbers_until n-1).find {|m| n % m == 0 } == nil end def prime_numbers_until limit expand_prime_number_dict_to limit if limit > $max_known_number $prime_numbers.select {|n| n <= limit} end print (prime_numbers_until 100).join ','
あまりにも自然言語に近すぎて、逆に、コードの成長とともに形式言語独特の不自然さが出てくるという警鐘が鳴らなさそうで、ちょっと怖いかも。Pythonのように、シンプルな書式ルールで形式的に考えさせられるという制約があってくれたほうが、勉強するには向いてる気がする。
まあ、いきなりスキのないアルゴリズムを思い浮かべられる天才で、かつ、英語とRuby語のネイティブスピーカーであるというのが最強なんだろうな。ちょっとづつコードを洗練する書き方しかできない僕みたいなヤツは、Pythonで十分な気がする。Pythonはすぐにコードの異臭を教えてくれるから。