Вычитание списков в десятичной системе счисления - Lisp

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

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

Вычитание списков в десятичной системе счисления - Lisp

Решение задачи: «Вычитание списков в десятичной системе счисления»

textual
Листинг программы
(defun diff-lst (a1 a2)
 (let ((z1 (reduce #'(lambda (acc x) (+ x (* acc 10))) a1 :initial-value 0))
       (z2 (reduce #'(lambda (acc x) (+ x (* acc 10))) a2 :initial-value 0)))
      (dig2lst (- z1 z2))))
 
(defun dig2lst (d)
  (cond ((minusp d) (cons '- (dig2lst (abs d))))
        ((< d 10) (list d))
        (t (append (dig2lst (\ d 10)) (list (rem d 10))))))
 
(diff-lst '(1 2 3) '(8 6))
 
==> (3 7)
 
(diff-lst '(8 6) '(1 2 3))
 
==> (- 3 7)

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

В коде реализована функция вычитания двух списков в десятичной системе счисления.

  1. Сначала функция diff-lst принимает два списка a1 и a2 в качестве аргументов.
  2. Затем внутри let образуется переменная z1, которая инициализируется с помощью функции reduce и лямбда-функции (lambda (acc x) (+ x (* acc 10))) на основе списка a1. Начальное значение переменной z1 равно 0.
  3. Аналогично образуется переменная z2 на основе списка a2.
  4. Затем с помощью функции dig2lst переменные z1 и z2 преобразуются обратно в списки.
  5. Функция dig2lst работает следующим образом:
    • Если значение переменной отрицательное, то к результату добавляется символ -, а затем вызывается рекурсивно функция dig2lst для абсолютного значения.
    • Если значение переменной меньше 10, то оно просто добавляется в результирующий список.
    • В противном случае, сначала вызывается рекурсивно функция dig2lst для остатка от деления на 10, а затем результат добавляется в конец результирующего списка.
  6. В конце функция diff-lst возвращает полученный список (- z1 z2).
  7. Результат вычисления функции diff-lst для аргументов '(1 2 3)' и '(8 6)' равен (3 7). Это означает, что из первого списка вычитается второй, и результатом является список [3, 7].
  8. Аналогично, результат вычисления функции diff-lst для аргументов '(8 6)' и '(1 2 3)' равен (- 3 7). Это означает, что из второго списка вычитается первый, и результатом является список [-3, 7].

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


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

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

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