Haskell の sum と product を Scheme で実装
sum takes a list of numbers and returns their sum.
product takes a list of numbers and returns their product.
ghci> sum [5,2,1,6,3,2,5,7]
31
ghci> product [6,2,1,2]
24
ghci> product [1,2,5,6,7,9,2,0]
0
をSchemeで書くと
(define (sum lnum) (cond ((null? lnum) 0) (else (+ (car lnum) (sum (cdr lnum)))) ) ) (define (prod lnum) (cond ((null? lnum) 1) ((zero? (car lnum)) 0) (else (* (car lnum) (prod (cdr lnum)))) ) )
でいいのかな? 以下実験。
> (sum '(5 2 1 6 3 2 5 7))
31
> (prod '(6 2 1 2))
24
> (prod '(1 2 5 6 7 9 2 0))
0
いいみたいだ。でも(prod '())とすると
> (prod '())
1
となってしまうのが気になる。ここは0かエラーを返すべきかとも思うが、GHCでも
Prelude> product[]
1
となるので、別にいいのか。