List 对虚线对列表中的所有数字求和

List 对虚线对列表中的所有数字求和,list,scheme,List,Scheme,我是新来的,我有很多问题要理解 如果我有这个列表((a.1)(c.3)(b.2)),我需要得到数字6 我知道如何使用数字而不是虚线对(从这里获得): 但是,如何获得虚线对列表中所有数字的总和?这是您可以做到的: (define (sum elemList) (if (null? elemList) 0 (+ (cdr (car elemList)) (sum (cdr elemList))))) 只需获取每个元素的car的cdr。使用car部分提取列表的第一对元素,

我是新来的,我有很多问题要理解

如果我有这个列表((a.1)(c.3)(b.2)),我需要得到数字6

我知道如何使用数字而不是虚线对(从这里获得):


但是,如何获得虚线对列表中所有数字的总和?

这是您可以做到的:

(define (sum elemList)
  (if (null? elemList)
      0
      (+ (cdr (car elemList)) (sum (cdr elemList)))))
只需获取每个元素的
car
cdr
。使用
car
部分提取列表的第一对元素,使用
cdr
检索该对元素的第二个元素。我们甚至可以简化一下:

(cdr (car elemList))
相当于:

(cdar elemList)
但在Scheme中,我们更喜欢使用内置函数来编写解决方案,因此更惯用的编写方法是:

(define (sum elemList)
  (apply + (map cdr elemList)))
我们获取列表中每对的
cdr
,然后将它们全部相加。简洁、漂亮、简单。上述任何解决方案都将按预期工作:

(sum '((a . 1) (c . 3) (b . 2)))
=> 6
(sum '((a . 1) (c . 3) (b . 2)))
=> 6