Две основные синтаксические проблемы заключаются в том, что (lst val1)
и (lst)
пытается вызвать lst
как функцию, и что else
не должно иметь условия - форма cond
равна
(cond (condition1 expression1)
(condition2 expression2)
(else expression))
(equal? val2 lst)
говорит "val2
равно всему списку lst
".Это не имеет смысла.
(equal? val2 (cadr lst))
говорит, что "val2
равно второму элементу списка lst
".Вам не нужно заботиться о втором элементе.
Первый элемент - car
.Хвост cdr
.(Многие используют first
и rest
, которые являются более современными именами.)
Вы довольно близки к решению, поэтому я просто дам вам структуру:
- Если список пуст, результатом будет пустой список.
- Если первый элемент списка является тем, который вы заменяете,
cons
новое значение в результате повторения в остальныхсписка. - В противном случае
cons
существующее значение в результате повторения в остальной части списка.