Функция в Scheme для замены всех вхождений элемента в списке другим элементом.

Я могу удалить элемент из списка, но я понятия не имею, как написать функцию на схеме для замены всех вхождений элемента в списке другим элементом. Любая помощь будет оценена.


person nan1    schedule 18.12.2009    source источник
comment
Связано: « title = «как заменить элемент другим в списке в drscheme, когда заданы параметры»> stackoverflow.com/questions/4761285/   -  person Flux    schedule 24.03.2019


Ответы (1)


Простая версия может быть разработана следующим образом:

(define (replace old-element new-element list)
  ; if the list is null, just return null
  ; else if the car of the list is equal to old-element
  ;    run replace on the rest of the list, and cons new-element onto it
  ; else
  ;    run replace on the rest of the list, and cons the car onto it)

(Я оставил детали на ваше усмотрение, так как вы должны учиться на практике.)

Помните, что в Scheme наиболее естественным способом работы обычно будет составление нового списка по частям из вашего старого списка, а не попытка внесения небольших изменений в старый список по одному.

Обратите внимание, что вы также можете использовать map, чтобы сделать это намного короче.

person mqp    schedule 18.12.2009
comment
Синтаксис здесь плохой, должно быть (define (replace old new list) ...). Что касается фактической реализации - не делайте этого, используйте map. - person Eli Barzilay; 18.12.2009
comment
Я предположил, что он работает с руководством или учебником, который еще далеко не map. - person mqp; 18.12.2009
comment
Любая подобная книга могла бы предоставить такое же руководство, так что она либо не нужна, потому что о ней рассказывается в книге, либо потому, что map доступна. - person Eli Barzilay; 18.12.2009
comment
Справедливо, наверное, это правда. - person mqp; 18.12.2009