Я собирался сделать мою обычную фишку и поставить на коде -review hat, но, должным образом отформатировав вашу вторую попытку, здесь слишком много проблем, чтобы принять инкрементный подход. Вам нужно сесть и объяснить, что вы намеревались сделать для этого кода.
В частности, что происходит с x
? Является ли это глобальной привязкой, которую вы переустанавливаете каждый раз, или вы имели в виду определить локальное связывание и случайно забыли, что и переменная if
нуждается в переменной, прежде чем вы ее обходите? Что вы пытаетесь сделать с этими setq
s, и что вы пытаетесь сделать с этими loops
(как написано, ничего не делать)?
[временно Доны код-обзор шляпу]
Прежде всего, любезно format your code properly. Это небольшая вещь, но она значительно улучшает читаемость.
(defun add (a b)
(if (and (< a x) (> b x))
(if (evenp x))
((setq (x (+ a 1))
(loop for x from a to b do (+ x 2))))
((setq (x a)) (+ x 2)
(loop for x from a to b do (+ x 2)))))
и с надлежащим уровнем отступа, довольно много ошибок просто падают на вас сразу.
- Во-первых, что топ
if
имеет три положения, в нем (в if
и два setq
ые по какой-то причине).
- Во-вторых, эта вторая
if
не имеет предложений, просто тест. Это означает, что он ничего не делает
- В-третьих, вы вызываете некоторые очень странно названные функции в теле
if
. Я готов гарантировать, что ((setq (x a)) (+ x 2) (loop for x from a to b do (+ x 2)))
не то, что вы имеете в виду, потому что это вызывает функцию (setq (x a))
по аргументам (+ x 2)
и (loop ...)
.
- В-четвертых, вы вызываете
setq
двумя разными неправильными способами. (setq (x (+ a 1))
Это попытка установить результат вызова функции x
на (+ a 1)
на NIL
. (setq (x a)) (+ x 2)
это пытается установить результат вызова функции x
на a
на NIL
, а затем на оценку и отбрасывание (+ x 2)
.
Начните с первого нечетного числа на уровне или равного началу диапазона, добавьте петлю 2 и добавьте все их к общей сумме, пока не закончите конец диапазона. – Barmar
Ну, я понимаю, как должен работать алгоритм, я просто не знаю, как его реализовать в lisp. – user2167174
Покажите, что вы пробовали, мы не здесь, чтобы делать домашнее задание для вас. – Barmar