1

私は何度も何度も見ましたが、この質問に対する答えが見つからないことに驚きました。

R5RS スキームでは、リストの各要素を相互に乗算する手順をどのように記述しますか。リスト '(4 5 6) が与えられた場合、プロシージャ Multiply-List は 120 を返す必要があります。4*5*6=120.

前もって感謝します。

4

3 に答える 3

1

(define (multiply-list l) (apply * l))

些細なことです。それがおそらく、あなたが答えを見つけられなかった理由です。誰もそれを書き留めようとはしませんでした…</p>

于 2012-09-26T07:14:39.000 に答える
1

「推奨される」方法:

(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))))))
于 2012-09-26T12:51:23.580 に答える
0
(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)))))))
于 2012-09-26T05:55:08.363 に答える