Сторнирование списка в Схеме с ограничениями - PullRequest
0 голосов
/ 26 февраля 2019

У меня уже есть код для обращения к списку:

    (define (myreverse lst)
       (if (null? lst)
          lst
          (append (reverse (cdr lst))
                  (list (car lst)))))

Но я хочу сделать это, используя только lectrec, cons, car и cdr.Как я могу это сделать?

1 Ответ

0 голосов
/ 25 апреля 2019

Стандартный способ сторнировать список без добавления - использовать вспомогательную функцию REVAPPEND, например:

(define (reverse x) (revappend x '()))
(define (revappend x y)
  (if (null? x)
      y
      (revappend (cdr x) (cons (car x) y))))

Теперь, если вы хотите реализовать реверс как одну функцию, вы можете использовать LETREC для локального определенияпомощник REVAPPEND, как этот

(define (reverse x)
  (let revappend ((x x) (y '()))
    ...))

Это всего лишь шаблон, с которого можно начать, не стесняйтесь спрашивать, нужна ли вам дополнительная помощь.

...