Вот как вы можете это сделать:
(define (sum elemList)
(if (null? elemList)
0
(+ (cdr (car elemList)) (sum (cdr elemList)))))
Просто возьмите cdr
car
каждого элемента.С частью car
вы извлекаете первую пару списка, а с помощью cdr
вы получаете второй элемент этой пары.Мы даже можем немного упростить это:
(cdr (car elemList))
Это эквивалентно:
(cdar elemList)
Но в Схеме мы предпочитаем использовать встроенные функции для составления решений, поэтому ещеидиоматический способ написать это будет:
(define (sum elemList)
(apply + (map cdr elemList)))
Мы берем cdr
каждой пары в списке, а затем складываем их все вместе.Коротко, красиво и просто.Любое из вышеперечисленных решений будет работать должным образом:
(sum '((a . 1) (c . 3) (b . 2)))
=> 6