理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

3.3.5 (Propagation of Constraints)

この節のタイトルにある "Constraints" というのは,基本的に世の中の関係式全てに相当するもののようです.例えば,摂氏と華氏の変換式(これは実際に SICP に,例題として取り上げられている)は,次のように表せます.
 9C=5(F-32)
(C: 摂氏, F: 華氏)

じゃぁこれをプログラムに落としこむときに普通考えるのは,華氏から摂氏へ変換する関数と,摂氏から華氏へ変換する関数を用意することかなーって思います.

#include <iostream>

double ftoc( double fahrenheit ) {
    return 5.0/9 * ( fahrenheit - 32 );
}

double ctof( double celcius ) {
    return 9.0/5 * celcius + 32;
}

int main( void ) {
    std::cout << ftoc( 140 ) << std::endl;  // 60
    std::cout << ctof( 60 ) << std::endl;   // 140
    return 0;
}

この例だと 2 つの関数を用意すれば良いわけですけど,結局この 2 つの関数を支配してるのは  9C=5(F-32) です.だったら,C に数値を入力するときは F に自動的に華氏としての温度を出力させ,F に数値を入力するときは C から勝手に摂氏としての出力させるような"回路"として扱えば,一つで済む!!

この章 (3.3.5 Propagation of Constraints) では,そういう,制約 (Constraints) ベースで物事を考えていく感じです.楽しみですね!