
I
2 Написать функцию, удаляющую все числовые константы из одноуровневого
списка
В этой задаче нас не интересует внутренняя структура элементов списка, нам
достаточно знать, является ли элемент числом или нет Для решения такой задачи
достаточно использования хвостовой рекурсии
Терминальным случаем для нашей функции будет пустой список В этом случае
значение функции также будет равно пустому списку Рекурсивных ветви должно быть
две для удаления головы списка и для ее сохранения В обеих ветвях для обработки
остальных элементов рекурсивно вызывается наша функция с хвостом списка
(defun
myfun(x)
(cond
( (null x)
nil)
(
(numberp
(car
x))
(myfun
(cdr
x)))
(t
(cons (car x) (myfun
(cdr
x))))
;
удаление головы
3
Написать
функцию,
проверяющую*
является ли число простым
Простым называется число, не имеющее делителей, кроме 1 и самого этого числа
Для проверки, является ли число X простым, необходимо проверить все числа в
диапазоне от 2 до
Х-1
Если среди этих чисел найдется хотя бы одно число, на которое
X делится нацело, то число X не является простым, и остальные делители можно не
проверять
Пусть текущий проверяемый делитель равен I Если остаток от деления X на I
равен 0, то можно сразу сказать, что значением функции является NIL. Если число не
принадлежит указанному диапазону, то перебор закончен, и значение функции равно Т
В противном случае необходимо проверить следующее число из диапазона Последнее
предложение описывает рекурсивную ветвь нашей функции, два предыдущих -
терминальные Мы видим, что в рекурсивной ветви наша функция будет вызываться
только один раз, поэтому вся функция должна быть написана по схеме хвостовой, или
частной, рекурсии
Функция, которую нам нужно написать, имеет только один параметр -
исследуемое число N, но для проведения проверок нам необходимо передавать и
текущее значение числа из проверяемого
диапазона,
поэтому мы должны написать две
функции рекурсивную функцию проверки и вызывающую ее нерекурсивную
функцию
33