Преобразование списка в список простых чисел - Lisp
Формулировка задачи:
Добрый день, уважаемые форумчане!
Я в Лиспе совсем новичок, поэтому решение задач пока дается с трудом.
Помогите с написанием цикла по простым числам при заданных начальном и конечном значении, т.е. имеем допустим список вида:
(1 11)
нужно получить из него такой:
(2 3 5 7 11)
Плюс нужно проверять первичные элементы списка на положительность, т.е. если какой-либо из элементов списка (первый или последний) меньше 1, то возвращаемый список должен быть nil.
Функция проверки что число простое есть, да и поиск следующего простого числа тоже уже удалось получить.
Пишу на CommonLisp.
Заранее буду благодарен за любую помощь.
Код к задаче: «Преобразование списка в список простых чисел - 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)
6 голосов, оценка 4.000 из 5
СОХРАНИТЬ ССЫЛКУ