(define (evenList xs)
(cond
((null? xs) '())
((eq? (cdr xs) '()) '())
(else (cons (cadr xs) (evenList (cddr xs))))))
Я использую этот код, но он не создает список так, как я этого хочу. (evenList (list 1 2 3 4))
оценивается как (cons 2 (cons 4 '()))
в REPL, но я хочу, чтобы это было похоже на (list 2 4)
.
(evenList (список 1 2 3 4)) Ответ этой функции в приведенных выше кодах (минусы 2 (минусы 4'())) а я хочу чтобы было так (список 2 4)
Спасибо дружище решил мою проблему
@DarKing - я отредактировал ваш вопрос, чтобы прояснить проблему и упростить поиск для будущих посетителей; Я надеюсь, что это нормально. Я также переместил свой предыдущий комментарий в ответ.
Ваш код работает и дает правильный результат, насколько я могу судить. Я предполагаю, что вы используете язык для начинающих студентов. Список (2 4)
представлен как (cons 2 (cons 4 '()))
в REPL при использовании языка для начинающих студентов; этот же список представлен как (list 2 4)
в REPL при использовании среднего студенческого языка. В #lang racket
вы увидите это как '(2 4)
в REPL. Во всех случаях базовая структура данных списка одинакова; это просто вопрос печатного представления списка.
мы действительно должны сделать какой-то специальный тег для этого «форматирования печати» в Racket. эти вопросы продолжают появляться, и наличие тега поможет найти похожие вопросы.
@WillNess - это хорошая идея. Я искал обман, прежде чем ответить, и ничего не мог найти; тег был бы полезен. Поскольку печатные представления так важны в lisp в целом, я мог бы назвать печатное представление. На первый взгляд, я не вижу ничего подобного в наличии прямо сейчас.
хорошая идея, я думаю. уверен, что его подхватят и другие языки с богатым поверхностным синтаксисом для данных, например, например. (слышу ;)) Clojure. вы должны просто добавить этот тег здесь, в этом вопросе. если по какой-то причине вам это не разрешено, отправьте мне пинг, и я это сделаю, я тоже это делал раньше (например, с помощью map-функции). но так как вы придумали это, вы должны иметь честь сделать это самостоятельно. :)
как насчет того, чтобы переименовать его в «repl-printed-representation», если быть более точным? Я нашел и пометил только несколько вопросов, так что не проблема перейти и пометить их заново. другой вариант — всегда также помечать их как «repl», но ограничение в 5 тегов иногда не позволяет этого. Что вы думаете? «печатное представление» кажется слишком широким, может также включать проблемы с сериализацией или ошибочно приниматься за таковое и удаляться. (!)
@WillNess - я не обязательно против этого, но я не думаю, что печатные представления предназначены только для REPL. Читатели Лиспа читают печатные представления и могут читать их, например, из файлов. Я не уверен, что есть преимущество в том, чтобы быть более конкретным, но REPL также, вероятно, является местом, где большинство вопросов возникнет у спрашивающих. Я не чувствую себя слишком сильно в любом случае ....
Да, я печатал, когда вы добавили это; это справедливое замечание. Хорошо, согласен.
большой. теперь давайте посмотрим, будем ли мы презираемы мета-толпой. :) :)
скрещенные пальцы ;)
«но это не создает список так, как я хочу», не очень полезно. Каков текущий результат? Каков ожидаемый/требуемый результат?