Я думаю, вы можете сделать это сложнее, чем нужно;в Scheme-ish, стиле функционального программирования, мы получаем новые списки из существующих списков, используя такие функции, как cons
.
Кроме того, при написании в стиле функционального программирования мы обычно не используем destructive-updateвиды функций, такие как append!
, или любые из этих "!"functions.
Вы на правильном пути, но попробуйте подумать о проблеме с точки зрения получения нового списка из существующих списков: попробуйте написать функцию, которая принимает два списка ввода, скажем, l1 и l2и создает список, который состоит из всех элементов в l1, за которыми следуют все элементы в l2.Ваша Update_List
функция, показанная выше, показывает, что вы все еще думаете о проблеме с точки зрения императивного программирования, включая деструктивное обновление, и обычно это не так, как это делается в Схеме (и в функциональном программировании в целом.)
Я знаю, что это не прямой ответ на ваш вопрос, но кажется, что это может быть домашнее задание, и я надеюсь, что это даст вам некоторые подсказки о том, с чего начать / возобновить свою работу в поисках решения.Немного потрудившись найти ответ, принципы становятся лучше, и вы лучше их изучаете таким образом.
Отредактировано:
Мои извинения перед вами: я подумал, что вы, возможно, являетесь студентом, работающим наддомашнее задание, но потом я увидел ваш другой вопрос здесь !
Я все же призываю вас подумать над тем, что я сказал выше, прежде чем читать дальше, потому что обучение происходит с борьбой.
ТАК: не читайте дальше, прежде чем действительно усердно подумать над тем, что я предложил выше.
Вот как я бы написалфункция, подобная той, что я описал выше:
(define append-lists
(lambda (l1 l2)
(cond ((null? l1) l2)) ; if l1 is empty, then l2 is the "answer"
(else
; cons-truct a new list with the (car l1)
; and the result of appending l2 to the
; rest of l1, i.e., (cdr l1)
(cons (car l1)
(append-lists (cdr l1) l2) ) ) ) ) ) )