#scheme #racket
#схема #ракетка
Вопрос:
Я пишу функцию рекурсии, возвращающую пустой список в базовом варианте. Однако вывод функций показывает «пустое» слово в моем списке, которое мне не нужно.Вот так;
(список (list ‘abc) (list ‘def) пустой (list ‘ghi))
Как я могу предотвратить это? Спасибо.
Комментарии:
1. Пожалуйста, включите ваш код, чтобы мы знали, о чем вы говорите.
2. Также неясно, какой результат вы хотите. Включите тестовый пример, пожалуйста.
Ответ №1:
Проблема, вероятно, в том, что Racket имеет несколько стилей печати для значений. Попробуйте изменить его (в диалоговом окне выбора языка) на «write» или как там это называется, что должно заставить его выводиться ((abc) (def) () (ghi))
вместо этого.
Ответ №2:
empty
То, что вы видите в результате, не является «словом» — обратите внимание, что оно не заключено в кавычки. Если вы действительно ожидаете в результате пустой список, то, похоже, вы его получили. Вы даже можете проверить это:
> (empty? (third (list (list 'abc) (list 'def) empty (list 'ghi))))
#t
Ответ №3:
Не зная подробностей, мое лучшее предположение было бы чем-то вроде
(let ((result (recursive-call ...)))
(if (null? result) (resursive-call (cdr whatever-list))
(cons result (cdr whatever-list)))
По сути, просто проверьте, является ли результат пустым списком, и если да, не помещайте его в список, который вы возвращаете.