球拍-根据给定列表生成新列表

时间:2019-10-27 15:02:29

标签: racket

我正在尝试基于原始列表创建一个新列表,其中列表中的每个元素都包含原始列表中的第一个元素,第二个元素是原始列表中第二个和第三个元素的乘积。

示例:如果原始列表是

(list (list "A" 2 3) (list "B" 3 4)

那么结果将是

(list (list "A" 6) (list "B" 12)) 

到目前为止,我已经写过:

(define (total-price-list lol)
  (cond
    [(empty? lol) empty]
    [else (list (price-list (first lol))
                (price-list (rest lol)))]))

(define (price-list row)
  (list (first row) (* (second row) (third row))))

我不知道如何达到想要的结果。有人可以帮我处理我的代码吗?

1 个答案:

答案 0 :(得分:1)

地图中的lambda保持第一个元素不变,并将每个子列表的第二个和第三个元素相乘。

(define (total-price-list lol)
  (map (λ (l) (list (first l) (* (second l) (third l)))) lol))

(total-price-list (list (list "A" 2 3) (list "B" 3 4)))
; => '(("A" 6) ("B" 12))