Нахождение квадратного корня через dolist - Lisp

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

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

Помогите,пожалуйста.Есть список,нужно с помощью dolist,найти квадратные корни Например: (list 4 9 16 25 49) Ответ: (2 3 4 5 7)

Решение задачи: «Нахождение квадратного корня через dolist»

textual
Листинг программы
(defun sqrt-them-all (w &aux ac)
  (dolist (a (reverse w) ac)
    (setf ac (cons (newton a .05) ac))))
 
(defun newton (x e &optional (z 1))
  (if (> (abs (- x (* z z))) e)
      (newton x e (* (+ z (/ x z)) .5))
      z))
 
> (sqrt-them-all '(4 8 16 32))
(2.0006099 2.8284686 4.0022573 5.6569767)

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

В коде представлена функция sqrt-them-all, которая вычисляет квадратный корень из списка чисел. Она использует вспомогательную функцию newton, которая вычисляет квадратный корень из одного числа с помощью метода Ньютона. Функция newton принимает три аргумента: x, e и z. Аргумент x — это число, из которого необходимо вычислить квадратный корень, e — это требуемая точность вычисления, а z — это начальное приближение для метода Ньютона (по умолчанию равное 1). Если абсолютное значение разности числа x и произведения числа z на само себя больше, чем требуемая точность e, то функция newton вызывает саму себя, передавая в качестве аргументов x, e и результат умножения числа z на само себя, округлённый до пятого знака после запятой. Иначе функция newton возвращает значение z. В функции sqrt-them-all список чисел передаётся в качестве аргумента w. Сначала он перевернутый, поскольку используется функция dolist, которая работает с элементами списка в обратном порядке. Аргумент ac — это аккумулятор, в который собираются корни вычисленных чисел. При выполнении функции sqrt-them-all сначала происходит итерация по перевёрнутому списку чисел. На каждой итерации вызывается функция newton с аргументами, полученными из списка. Результат вычисления функции newton добавляется в аккумулятор ac. В итоге функция sqrt-them-all возвращает список корней вычисленных чисел.

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


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

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

7   голосов , оценка 3.857 из 5
Похожие ответы