再帰
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 ); }
def TotalSum( nVal ): if nVal == 0 : return nVal else : return nVal + TotalSum( nVal - 1 )
(define (totalSum val) (if (= val 0) 0 (+ val (totalSum (- val 1)))))
-- パターンマッチング 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 はおもろい。久しぶりにもっとコードを書きたいと思わせてくれる。