Суммируйте все числа в списке пунктирных пар - PullRequest
0 голосов
/ 18 октября 2018

Я новичок в Схеме, и у меня много проблем, чтобы понять это.

Если у меня есть этот список '((a . 1) (c . 3) (b . 2)), мне нужно получить число 6.

Я знаю, как сделать это с числами, а не пунктирными парами (получите это из этого SO ответа ):

(define (sum elemList)
  (if
    (null? elemList)
    0
    (+ (car elemList) (sum (cdr elemList)))
  )
)

Но как я могу получить сумму всех чисел в пунктирнойсписок пар?

1 Ответ

0 голосов
/ 18 октября 2018

Вот как вы можете это сделать:

(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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...