Пример LISP задача

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, для очередной лабораторной работы скинули задачу вот такую. Найти все натуральные числа которые меньше либо равны N и которые в свою очередь делятся без остатки на компоненты цифры числа N. К примеру число N = 13, Компоненты Цифры N = 1,3. Следовательно надо найти числа которые делятся и на 1 и на 3 без остатка.

Решение задачи: «Пример LISP задача»

textual
Листинг программы
 (defun task (n)
 (let ((r nil) (d nil) (m n) (k 0))
   (loop
      (when (zerop m) (return nil))
      (setq k (rem m 10) m (truncate (/ m 10)))
      (when (> k 0) (push k d)))  
   (dotimes (i n r)
     (let ((s 0) (ii (+ i 1)))
        (dolist (k d nil)
          (setq s (+ s (rem ii k))))
        (when (zerop s) (push ii r))))))

Объяснение кода листинга программы

В коде представлена функция на языке Lisp с именем task, которая принимает один аргумент n. В первой части кода определяется начальное значение r равное nil, которое будет использоваться в цикле. Затем код переходит к циклу loop, который выполняется до тех пор, пока m не станет равным нулю. В каждой итерации цикла значение k увеличивается на 10, а m округляется вниз до ближайшего целого числа и делится на 10. Если k больше нуля, то число k добавляется в конец списка d. После завершения цикла loop, код переходит к циклу dotimes, который выполняется n раз. В каждой итерации цикла значение i увеличивается на 1, а r остается равным nil. Внутри цикла dotimes определен еще один внутренний цикл dolist, который выполняется для каждого элемента списка d. В каждой итерации внутреннего цикла значение ii увеличивается на 1, а s остается равным 0. Если внутренний цикл dolist завершился, то это означает, что список d пуст, поэтому значение ii добавляется в начало списка r. Когда внутренний цикл dotimes завершается, функция task возвращает список r.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5