私は何度も何度も見ましたが、この質問に対する答えが見つからないことに驚きました。
R5RS スキームでは、リストの各要素を相互に乗算する手順をどのように記述しますか。リスト '(4 5 6) が与えられた場合、プロシージャ Multiply-List は 120 を返す必要があります。4*5*6=120.
前もって感謝します。
(define (multiply-list l) (apply * l))
些細なことです。それがおそらく、あなたが答えを見つけられなかった理由です。誰もそれを書き留めようとはしませんでした…</p>
「推奨される」方法:
(define mult
(lambda (the-list)
(apply * the-list)))
反復実装:
(define mult-it
(lambda (the-list)
(let ((result 1))
(begin
(for-each
(lambda (x)
(set! result (* result x)))
the-list)
result))))
純粋に機能的で再帰的な実装:
(define mult-rec
(lambda (the-list)
(if (null? the-list)
1
(* (car the-list) (mult-rec (cdr the-list))))))
(define (multiply-list list)
(let loop ((list list) (accum 1))
(cond
((null? list) accum)
((not (number? (car list))) '())
(else (loop (cdr list) (* accum (car list)))))))