Как напечатать строку в обратном направлении, в схеме? - PullRequest
2 голосов
/ 02 августа 2010

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

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

(if (null? X) x

(cons (car x) (word (cdr x)))))


(слово '(abc))

(список' a 'b' c)

Ответы [ 4 ]

6 голосов
/ 02 августа 2010
(reverse '(a b c))

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

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

2 голосов
/ 02 августа 2010

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

 (list->string (reverse (string->list "market")))
 "tekram"
1 голос
/ 02 августа 2010

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

(define (word lis)
  (if (null? lis)
      '()
      (append (word (cdr lis))
              (list (car lis)))))
1 голос
/ 02 августа 2010

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

...