Это немного сложнее, чем кажется.Вам необходимо создать новую пару, поскольку (как правило) вы не можете изменить существующую пару, и в любом случае map
возвращает новый список:
; returns a new list
#lang racket
(map (lambda (p) (cons (car p) (/ (cdr p) sum)))
lista)
В случае, если вы предполагаете изменить существующие пары с помощьюset-cdr!
, тогда вы должны использовать for-each
вместо map
и перейти на язык, который поддерживает парную мутацию:
; modifies list in-place
#lang r5rs
(for-each (lambda (p) (set-cdr! p (/ (cdr p) sum)))
lista)
Я не думаю, что вы должны изменять данные веще нет, так что я бы пошел с моим первым предложенным решением, которое является идиоматическим.