Как можно сгладить список, не используя функцию сглаживания, встроенную в ракетку?Как вручную сгладить список в Racket (Схема)
Я понимаю, что реализация по умолчанию Flatten является
(define (flatten lst)
(cond
((null? list)
empty)
((list? (car lst))
(append (flatten (car lst)) (flatten (cdr lst))))
(else
(cons (car lst) (flatten (cdr lst))))))
, но им не совсем уверен, как идти о не используя функцию Flatten как я не знаю, как он работает за кулисами. Я не мог найти хорошее объяснение этому, кроме реализаций этого кода. Может кто-то пожалуйста, объясните
Это моя самая плохая попытка и им в значительной степени невежественны, потому что это даже не близко и не будет работать ....
(define acc null)
(define (my-flatten lst)
(cond
[(null? lst) null]
[(list? (car lst)) (help-flatten (car lst)) (append (cdr lst) acc)]
[else (append (car lst) acc) (my-flatten (cdr lst))]))
(define (help-flatten subLst)
(if (null? subLst)
(set! acc null)
(append (car subLst) acc))
(help-flatten (cdr subLst)))
Что вы имеете в виду? первая функция «сглаживания» не используется с помощью функции «сглаживания» Racket, она рекурсивно вызывает себя. Эта реализация в значительной степени самодостаточна, но неверна - см. Мой ответ. Кроме того, старайтесь избегать использования операций мутации ('set!'), Это не то, как мы пишем большинство функций в Схеме. –