Как я могу сохранить номер в списке и использовать тот же список (со всеми добавленными элементами) на более позднем этапе? - PullRequest
0 голосов
/ 27 февраля 2012

Это моя первая программа на LISP. Мы используем TinyLISP (http://www.ugcs.caltech.edu/~rona/tlisp/tlspec.html).

Я пишу программу, которая получает натуральное число num и возвращает сумму всех чисел от 0 до num (включительно), кратных 3 или 5.

У меня есть функция, которая определяет, записано ли ее значение, кратное 3 или 5, но часть, на которой я застрял, - это то, где я пытаюсь сохранить все переменные, через которые я делаю цикл, в 2 разных списка.

Например, если мне дают число (например, 5), я начинаю с цифры 5, а затем отправляю число в мою функцию, которая определяет, является ли оно кратным 3 или 5. Я хочу сохранить любые возвращенные переменные как True для одного списка, затем поместите все, которые возвращены как NIL, в другой список. Проблема в том, что я не могу понять, как вызвать список, который я создал ранее. Список должен иметь все значения из предыдущих раз, как я его назвал.

Как я могу решить эту проблему со списком?

1 Ответ

2 голосов
/ 29 февраля 2012

Начните с этого:

(defun sumx (n m) (sumx_aux n m ....... ))
(defun sumx_aux (n m x s) (if (> x n) s (sumx_aux n m (+ x m) ..... )))

Что делает эта sumx функция?

Заполните пробелы, выясните, как бы вы их использовали, и вы почти закончили. :)

Если вам нужны дополнительные подсказки, прочтите принцип включения-исключения . По сути, здесь речь идет о вычитании чисел, которые были подсчитаны дважды.

Но если вы настаиваете на фактическом построении ваших двух списков, вы сделаете это, имея два , накапливающих параметры в вашей рекурсивной функции, и добавив число, которое вам нужно в данный момент, либо к одному, либо к другому, в два отдельных рекурсивных вызова в двух предложениях if:

(defun foo_loop ( ... a b )
  ...
  (if ...
    (foo_loop ... (cons c a) b)
    (foo_loop ... a (cons c b))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...