bonotakeの日記

元・ソフトウェア工学系研究者、今・AI系エンジニア

なぜ手続きは戻り値を持ったのか

圏論勉強会で人が集まる前に、ちょろちょろと。走り書きみたいになってしまいますが。
また朝方にぼーっと考えていたのだけど、なぜ多値関数が流行らないかを問う前に、掲題の事実を考えた方がいいんじゃないかとふと思いました。

ていうか、CやPascalが現れる前の手続き型言語で、手続き(サブルーチン)が計算した結果を返すのはグローバル変数か、引数だったと思うのですよね*1。なので、CやPascalあたり(実際にどの辺がハシリなのかはわかりませんが)が手続きに戻り値をつけたのは何故かを先に考える方が、真実に迫れるんじゃないかと。

で、1つの解としては、「手続きに右辺値を持たせたかった」というのがあると思うのです。関数呼び出しをそのまま代入したり、別の値と比較したりできるし。

そう考えると、受け側(左辺値)に代入できる値としては、値1個だけ返すのが概念的・文法的に妥当だった…のかな?(この辺はあやふや)そうした言語が標準、あるいは標準言語のベースになっているので、多値関数が「流行らない」のではないかと。

つか、いくら多値を返す関数があっても、その値を拾ってくる方法がないとどうしようもないよねぇ、という当たり前の結論に至ったら田町に着いてしまいました。

*1:今はあまり流行らないけど、結果呼び(call by result)とかいう引数渡しの概念もあるし

注:bonotakeは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。