3

Racket でプログラミングを始めたばかりですが、次の問題が発生しています。リストを持つ構造体があり、リスト内のすべての価格を合計する必要があります。

(define-struct item (name category price))
(define some-items
(list
   (make-item "Book1" 'Book 40.97)
   (make-item "Book2" 'Book 5.99)
   (make-item "Book3" 'Book 20.60)
   (make-item "Item" 'KitchenAccessory 2669.90)))

(item-price (first some-items))またはで価格を返すことができることを知ってい(item-price (car some-items))ます。

問題は、これですべてのアイテムの価格を合計する方法がわからないことです。


Óscar López への回答: 空白が正しく入力されていない可能性がありますが、Racket はスタートを押すとコードを黒くマークし、何も返されません。

  (define (add-prices items)
  (if (null? items)           
     0                   
      (+ (first items)                 
         (add-prices (rest items)))))
4

2 に答える 2

2

簡単な答え: 再帰を使用してリストをトラバースします。これは宿題のように思えるので、いくつかヒントを出します。空欄を埋める:

(define (add-prices items)
  (if (null? items)            ; if the list of items is empty
      <???>                    ; what's the price of an empty list?
      (+ <???>                 ; else add the price of the first item (*)
         (add-prices <???>)))) ; with the prices of the rest of the list

(*)この部分の書き方はすでに知っていることに注意してください。値にアクセスするための適切な手順を使用して、リストの最初のアイテムの価格を取得するだけです!

この問題を解決するには多くの方法があります。私が提案しているのは、各要素を操作し、結果を再帰的に結合する、リストをトラバースする標準的な方法です。

于 2012-11-07T19:38:51.527 に答える
1

foldl とマップを使用します。

(foldl + 0
       (map 
         (lambda (it)
           (item-price it))
             some-items))
于 2012-11-11T02:31:46.237 に答える