Как напечатать строку в обратном порядке по схеме?

Я знаю, что если я напишу свой код схемы следующим образом и введу (слово ‘(a b c)), он выведет список в том же порядке. Не могли бы вы сказать мне, есть ли способ распечатать его в обратном порядке. Ex- (список ‘c ‘b ‘a). это должен быть ввод пользователя, который я распечатываю в обратном порядке. Итак, я не могу назвать это (обратным' (a b c)). поскольку пользовательский ввод может быть чем-то вроде «(x y z). Большое спасибо.

(определить (слово х)

(если (ноль? х) х

(минусы(автомобиль x)(слово (cdr x)))))


(слово '(а б в))

(список 'а'б'в)


person Learner_51    schedule 01.08.2010    source источник


Ответы (4)


(reverse '(a b c))

изменит вашу строку. Однако я подозреваю, что это, вероятно, домашнее задание, и вы должны написать свою собственную функцию reverse.

Если да, можете ли вы отменить пустой список? Если у вас есть список и обратная сторона остальной части списка, можете ли вы получить обратную сторону всего списка? Вы видите, как сделать функцию, которая переворачивает список из этих частей?

person deinst    schedule 01.08.2010

Это то, что вы хотите?

 (list->string (reverse (string->list "market")))
 "tekram"
person Joel J. Adamson    schedule 02.08.2010

Всем спасибо за информацию и помощь. Я нашел способ сделать это. на всякий случай, если кто-то еще искал.

(define (word lis)
  (if (null? lis)
      '()
      (append (word (cdr lis))
              (list (car lis)))))
person Learner_51    schedule 02.08.2010
comment
Ой! Это действительно ужасно. Пожалуйста, не включайте это. - person John Clements; 03.08.2010
comment
@JohnClements Что именно делает это ужасным? Использование append (из-за его временной сложности)? Рекурсивное приложение не находится в хвостовой позиции? car и cdr вместо first и rest? Что-то другое? (Я начинающий рэкетир, поэтому я хотел бы научиться.) - person blubberdiblub; 22.04.2017
comment
Вы правы, я совсем не помогал. Это решение занимает n^2 времени. Чтобы добиться большего, необходимо использовать аккумулятор, что делает его линейным. Оглядываясь назад, я бы хотел, чтобы я этого не говорил. :) - person John Clements; 23.04.2017

Подсказка: cons создает список, состоящий из первого аргумента, за которым следует второй аргумент. Прямо сейчас вы используете его для создания списка первого элемента, за которым следует та же функция, применяемая к остальным элементам, и это создает список в том же порядке, что и раньше.

Как вы думаете, что произойдет, если вы создадите список с той же функцией, примененной к остальным элементам, за которыми следует первый элемент?

person Jerry Coffin    schedule 01.08.2010
comment
cons создает не список, а ячейку cons. В остальном хороший намек. - person Svante; 02.08.2010