结构中的球拍列表

时间:2012-11-07 17:26:12

标签: list struct scheme racket

我刚开始用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))返回价格。

问题是,我不知道如何用这个来加起所有物品的价格。


回答ÓscarLópez: 我可能没有正确地填充空白,但是当我按下开始并且不返回任何内容时,Racket将代码标记为黑色。

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

2 个答案:

答案 0 :(得分: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

(*)请注意,已经知道如何编写此部件,只需使用适当的访问该值的程序获取列表中第一项的价格!

有很多方法可以解决这个问题。我建议的那个是遍历列表,操作每个元素并递归组合结果的标准方法。

答案 1 :(得分:1)

使用foldl和map:

(foldl + 0
       (map 
         (lambda (it)
           (item-price it))
             some-items))