Kazzzz の日記の"言語が思考を規定する" というエントリが面白いので。確かに、プログラミング言語はそれが想定しているモデルがあるので問題解決に与える影響は少なくないと思います。
それをちょっと考えるのに一つの問題を設定して考えます。問題設定はnを1から初めてその2乗を足していき、和が2000を初めて超えたとき和はいくつになるかという問題を考えます。通常の、C++ 言語で考えれば以下のようになるでしょうか。
#include <iostream>
using namespace std;
int main() {
int sum = 0;
int n = 1;
while(sum > 2000) {
sum += n * n;
n++;
}
cout << sum;
return 0;
}
これを、F# で記述すると以下のようになります。
open System let square x = x * x;; let rec squareAdd sum current maximum = if (sum + square(current)) > maximum then (sum + square(current)) else squareAdd (sum + square(current)) (current + 1) maximum;; let main = System.Console.WriteLine(squareAdd 0 1 2000);;
コードを考えたときには、F# の方が考えやすかったです。というのも、F# の場合、ループではなく再帰で実現されているためです。再帰的な問題というのは再帰的な定義が書きやすい言語の方が解がイメージしやすいです。言語が変われば解を導く方法論も変わり、結果的にそれは成果物にも反映されます。異なる言語を学べばいろいろな解が得られるようになります。ポイントは異なる思想のもとに作られた言語を学んでいる方が得られるものが多いことでしょうか。

