Я пишу функцию дубликатора, используя ракетку. Функция дубликатора принимает вложенный список символов и чисел L и создает вложенный список символов и чисел путем «немедленного дублирования» каждого атома (символа или номера) на всех уровнях. Например: (duplicator '(a 1 b 2 c 3)) производит (aa 1 1 bb 2 2 cc 3 3), (дубликатор' ((a 1) b ((c)) 2) производит ((. аа 1 1) бб ((сс)) 2 2)Функция дубликатора ракеты
Вот моя функция:
(define (duplicator ls)
(if (null? ls)
'()
(cons (car ls)
(cons (car ls)
(duplicator (cdr ls))))))
у меня проблема является выводом (дубликаторе «((1) Ь ((с)) 2)) is '((a 1) (a 1) bb ((c)) ((c)) 2 2), чего я не хочу. Может ли кто-нибудь сказать мне, как правильно это сделать, пожалуйста ?
Вам нужно обусловить если сам на текущий элемент списка или нет. Если это так, он не должен дублировать, но рекурсивно вызывает дублируемую функцию с внутренним списком в качестве аргумента. Только когда вы находитесь на самом низком уровне, должно произойти дублирование. Я не знаком с синтаксисом Racket, но я попытаюсь понять это. –