Попытка перевернуть список в схеме - PullRequest
2 голосов
/ 12 апреля 2011

Будьте предупреждены: это домашнее задание.Я пытаюсь написать функцию Scheme, которая переворачивает список.'(1 2 3) становится' (3 2 1) и т. Д. Мне не разрешено использовать предопределенную функцию, которая делает это.

Я на правильном пути с тем, что я здесь написал?

;myReverse
(define (myReverse list)
    (if (null? list) '()
        (append (myReverse(cdr list)) car list)))

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Я на правильном пути с тем, что я здесь написал?

Да. Некоторые вещи для рассмотрения:

  • list - это имя встроенной функции, которое вы, возможно, захотите использовать в этом решении, так что вам, вероятно, не следует называть формальным это
  • Вы забыли скобки вокруг car list
  • append ожидает два списка; вы передаете ему список и число

    > (append '(1) 2)
    (1 . 2)
    > (append '(1) '(2))
    (1 2)
    
1 голос
/ 12 апреля 2011

Что ж, использование list в качестве имени будет странным, поскольку Scheme - это Lisp-1. Назовите это lst вместо.

Подумайте, что вы можете сделать с foldl, cons, '() и lst.

...