圏論勉強会で人が集まる前に、ちょろちょろと。走り書きみたいになってしまいますが。
また朝方にぼーっと考えていたのだけど、なぜ多値関数が流行らないかを問う前に、掲題の事実を考えた方がいいんじゃないかとふと思いました。
ていうか、CやPascalが現れる前の手続き型言語で、手続き(サブルーチン)が計算した結果を返すのはグローバル変数か、引数だったと思うのですよね*1。なので、CやPascalあたり(実際にどの辺がハシリなのかはわかりませんが)が手続きに戻り値をつけたのは何故かを先に考える方が、真実に迫れるんじゃないかと。
で、1つの解としては、「手続きに右辺値を持たせたかった」というのがあると思うのです。関数呼び出しをそのまま代入したり、別の値と比較したりできるし。
そう考えると、受け側(左辺値)に代入できる値としては、値1個だけ返すのが概念的・文法的に妥当だった…のかな?(この辺はあやふや)そうした言語が標準、あるいは標準言語のベースになっているので、多値関数が「流行らない」のではないかと。
つか、いくら多値を返す関数があっても、その値を拾ってくる方法がないとどうしようもないよねぇ、という当たり前の結論に至ったら田町に着いてしまいました。
*1:今はあまり流行らないけど、結果呼び(call by result)とかいう引数渡しの概念もあるし