whileの返値のなぞ

前エントリによりlispと比較しながらrubyのwhileの謎を追究してみる(若干)

lisp(gosh)の場合は以下のように、if,whileともに最後に評価した式の値を返す。

gosh> (if #t 'true 'false)
true
gosh> (if #f 'true 'false)
false
gosh> (while #f 'dammy)
#t

ところが、rubyの場合はifの時は最後に評価した式の値なのだがwhileはnilが返ってくる。
何故なんだろう。

irb(main):001:0> if true then "true" else "false" end
=> "true"
irb(main):002:0> if false then "true" else "false" end
=> "false"
irb(main):003:0> while false ; "dammy" ;end
=> nil

ひょっとしたらbreakのせいかも。

irb(main):004:0> while true ; break ; end
=> nil

ちなみにbreakには値がない。訳が分かりません。
lispのbreakに相当するものとして継続(call/cc)があるらしい(ホントはクロージャーのより上位な抽象概念らしい)が難しくて中止。
http://user.ecc.u-tokyo.ac.jp/~t50473/onlispjhtml/index.html
惜しいTeXのコンバート失敗してなかったら読んだのに(笑