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

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

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

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

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

textual
Листинг программы
  1.  (defun task (n)
  2.  (let ((r nil) (d nil) (m n) (k 0))
  3.    (loop
  4.       (when (zerop m) (return nil))
  5.       (setq k (rem m 10) m (truncate (/ m 10)))
  6.       (when (> k 0) (push k d)))  
  7.    (dotimes (i n r)
  8.      (let ((s 0) (ii (+ i 1)))
  9.         (dolist (k d nil)
  10.           (setq s (+ s (rem ii k))))
  11.         (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут