Найти сумму положительных четных чисел меньше N - Lisp
Формулировка задачи:
Помогите найти ошибку. Делаю в HomeLisp 1.13.4
выдает LESSP: Первый аргумент - не атом
==>f
Листинг программы
- (defun f (n)
- (if (< n 0) (+)
- (if(= 0 (rem n 2))
- (f (1- n))
- (+ n (f (1- n))))))
Листинг программы
- (f ‘(50))
Решение задачи: «Найти сумму положительных четных чисел меньше N»
textual
Листинг программы
- (defun f (n &optional (c 2) (s 0))
- (if (>= c n) s (f n (+ c 2) (+ s c))))
- ==> F
- (f 12)
- ==> 30
- (f 13)
- ==> 42
- (f 9)
- ==> 20
Объяснение кода листинга программы
В коде определена функция f
для нахождения суммы положительных четных чисел меньше заданного числа n
.
Второй и третий аргументы функции f
являются опциональными и по умолчанию равны 2 и 0 соответственно.
Если второй аргумент c
равен или больше n
, то возвращается значение переменной s
.
Если c
меньше n
, то рекурсивно вызывается функция f
с аргументами n
, c+2
и s+c
.
Поскольку в вопросе приведены только определения функции и результат её вызова для нескольких значений, то в списке ниже приведены только номера и названия переменных с их значениями:
n
- 12c
- 2s
- 0 Результат вызова функцииf
дляn=12
равен 30.n
- 13c
- 2s
- 0 Результат вызова функцииf
дляn=13
равен 42.n
- 9c
- 2s
- 0 Результат вызова функцииf
дляn=9
равен 20.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д