Преобразование списка в список простых чисел - Lisp
Формулировка задачи:
Решение задачи: «Преобразование списка в список простых чисел»
- (defun is-prime (n &optional (c 2))
- (cond ((= n 1) nil)
- ((<= n 3) t)
- ((> c (/ n 2)) t)
- ((zerop (rem n c)) nil)
- (t (is-prime n (+ c 1)))))
- ==> IS-PRIME
- (defun task (beg end &optional (r nil))
- (cond ((or (minusp beg) (minusp end)) nil)
- ((> beg end) r)
- ((is-prime end) (task beg (- end 1) (cons end r)))
- (t (task beg (- end 1) r))))
- ==> TASK
- (task 1 20)
- ==> (2 3 5 7 11 13 17 19)
- (task 2 66)
- ==> (2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61)
- (task 12 66)
- ==> (13 17 19 23 29 31 37 41 43 47 53 59 61)
Объяснение кода листинга программы
В коде используется функция is-prime
, которая проверяет, является ли число простым. Она принимает число n
и опциональный аргумент c
— число, до которого необходимо проверить, является ли n
простым. Если n
равно 1, функция возвращает nil
, так как 1 не является простым числом. Если n
меньше или равно 3, функция возвращает t
, так как 2 и 3 являются простыми числами. Если c
больше или равно n/2
, функция возвращает t
, так как n
не может быть простым числом. Если n
делится нацело на c
, функция возвращает nil
, так как n
не является простым числом. В противном случае функция рекурсивно вызывает саму себя с аргументами n
и c+1
.
Функция task
принимает начальное и конечное значение для списка простых чисел, а также опциональный аргумент r
— результат выполнения функции, который передается дальше по системе. Если начальное значение больше или равно конечному, функция возвращает r
. Если конечное значение является простым числом, функция рекурсивно вызывает саму себя с аргументами начальное значение, уменьшенное на 1, и результат, увеличенный на конечное значение. В противном случае функция рекурсивно вызывает саму себя с аргументами начальное значение, уменьшенное на 1, и r
.
При вызове функции task
с аргументами 1 и 20, она возвращает список простых чисел [2, 3, 5, 7, 11, 13, 17, 19]
. При вызове функции task
с аргументами 2 и 66, она возвращает список простых чисел [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]
. При вызове функции task
с аргументами 12 и 66, она возвращает список простых чисел [13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д