Въпроси по Scheme

Problem s 2 zadacha ot kontrolnoto po prakt-zachiklq

Re: Problem s 2 zadacha ot kontrolnoto po prakt-zachiklq

от Трифон Трифонов -
Number of replies: 0

Здрасти,

  първо да кажа, че идеята за решението е добра. Грешката поради която зацикля е на реда:

(set-cdr! l1 (append (enum (car l1) (cadr l1))(cdr l)))

Трябва да се смени на:

(set-cdr! l1 (append (enum (car l1) (cadr l1))(cdr l1)))

Иначе завързваш по някое време края на списъка за началото му и получаваш зациклена структура. Освен това има още един проблем - в началото на функцията insert1 вземаш cadr на l1, а не си сигурна, че има такъв. Затова е добре да промениш проверката (null? l1) на (null? (cdr l1)).

Изобщо първият параметър на функцията ти е излишен, мисля, че го използваш само за да връщаш списъка на края на процеса, но това можеш да го направиш, като добавиш l1 най-накрая във тялото на insert1. Така функцията винаги ще ти връща параметъра си, върху който е работила деструктивно.