http://www.rubyist.net/~matz/20060601.html#p02
「驚き最少の原則」という言葉は、まつもとさんが言い出したものでもなく、 またまつもとさんはもう既に使っていない言葉だとは知らなかった。 確かに、Matzにっきを「驚き最少」で検索してみても、このエントリしか出てこない。
「驚き最少の原則」と聞いてまず頭に浮かぶのは、 C++ と LISP と Ruby のストレス度合いのグラフが出てくるスライド。
今調べてみたところ、2002 年のスライドでは「『脳力』消費」のグラフとして出てきていた。 http://www.rubyist.net/~matz/slides/of-kansai2002/index.html
で、このスライドで「驚き最少の原則」も出てくる。 http://www.rubyist.net/~matz/slides/of-kansai2002/mgp00036.html
このスライドによって、自分の中では「驚き最少の原則」とこのグラフが結びついた形で 記憶されていた。 (このエントリを書くまで、グラフの縦軸は「驚き度」だと思い込んでいた)
その後、まつもとさんが「驚き最少の原則」を使わなくなったあとも、このグラフはスライドに出てくる。 例えば 2005 年のスライド。 http://www.rubyist.net/~matz/slides/tsukuba-seminar1/
よって、自分の中では「Ruby = 驚き最少」という認識を持ち続けていたのであった。
まつもとさん曰く、ruby-talk などでは打ち消していたとのことだったが、 ruby-talk は読んでいないので知らなかった。
Ruby の Array/Enumerable にも Test::Unit にも Rails にも、 配列が整列済みであるかどうかを調べるメソッド/アサーションはないようです。
標準であってよさそうな気はするのですが……
module Test::Unit::Assertions
def assert_sorted(object, message=nil)
first = true
prev = nil
sorted = true
object.each do |e|
if first
first = false
else
if (block_given? ? !yield(prev, e) : (prev <=> e) != -1)
sorted = false
break
end
end
prev = e
end
full_message = build_message(message, "<?> is not sorted.", object)
assert_block(full_message){ sorted }
end
end
書いてみましたが、もうちょっとうまい書き方がありそうな気はします。