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