LISP для начинающих: на каком этапе Do L oop я могу реализовать условие IF? - PullRequest
1 голос
/ 03 февраля 2020

Я разрабатываю простую функцию (для класса, поэтому, пожалуйста, не делайте полных ответов), которая возвращает первое нечетное целое число в списке, или 'нет, если их нет.

У меня есть рабочий код для нахождения нечетного числа:

(defun first-odd (lst)
  (do ((numbers lst (cdr numbers)))
      ((oddp (car numbers)) (car numbers))))

, но я не могу понять, где разместить условное IF (которое требуется для назначения) для выдачи "NONE", если список только чётный # или предположительно ноль. Я делаю точку выхода самого DO условной? Или это go до / после?

Я работаю над чем-то вроде этого (хотя у меня есть ощущение, что это неправильно):

(defun first-odd (lst)
  (do ((numbers lst (cdr numbers)))
      ((if (oddp (car numbers))
           (car numbers)
           (print 'none)))))

Или кто-то может посоветовать мне «где» разместить IF? Извините за действительно новички, но проф не предоставил много документации для DO, и я ломал голову все выходные. Заранее спасибо.

1 Ответ

2 голосов
/ 03 февраля 2020

DO принимает три аргумента: первый - это список переменных с их начальными значениями и последующими значениями; второе условие завершения, то есть когда выход из l oop и результат для возврата; третий - это тело l oop, и он необязательный.
Второй элемент содержит неявный if.
Ваш первый код выглядит хорошо с одним исключением: вы рассмотрели, что происходит, если нет нечетных элементы в списке? Затем вам нужно проверить конец списка (т.е. когда список равен нулю). Тогда результат будет зависеть от того, вышли ли вы из l oop, потому что было найдено нечетное число, или из нулевого списка. Вот где вы можете использовать IF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...