再帰

l02 として再帰をやってみた。
C:

long totalSum( long nVal )
{
	if( nVal == 0 ) return nVal;

	return nVal + totalSum( nVal - 1 );
}

Perl:

sub totalSum( ?$ ) {
	my( $nVal ) = $_[0];

	if( $nVal == 0 ) { return $nVal; }

	return $nVal + &totalSum( $nVal - 1 );
}

Python:

def TotalSum( nVal ):
	if nVal == 0 :
		return nVal

	else :
		return nVal + TotalSum( nVal - 1 )

Scheme:

(define (totalSum val)
  (if (= val 0)
	0
	(+ val (totalSum (- val 1)))))

Haskell:

-- パターンマッチング
totalSum1 :: Integer -> Integer
totalSum1 0 = 0
totalSum1 val = val + totalSum1 ( val - 1 )

Haskell では他にも書けるらしい。ここ にある Haskell-Tutorial 参照。

-- if-then-else
totalSum2 :: Integer -> Integer
totalSum2 val = if val == 0
					then 0
					else val + totalSum2 ( val - 1 )

-- ガード
totalSum3 :: Integer -> Integer
totalSum3 val | val == 0 = 0
			  | otherwise = val + totalSum3 ( val - 1 )

ガードは凄い。分かりやすい。if-then-else のほうはなんか有り難みが減ってしまうような気がする。
Haskell はおもろい。久しぶりにもっとコードを書きたいと思わせてくれる。