Вычитание списков в десятичной системе счисления - 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].