Даны два двоичных числа в виде списков, нужно их сложить - Lisp

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

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

даны два двоичных числа в виде списков....нужно их сложить..результат должен выводиться так же в виде списка...

Решение задачи: «Даны два двоичных числа в виде списков, нужно их сложить»

textual
Листинг программы
(defun deci-bin (n &optional ac)
  (if (zerop n)
      ac
      (deci-bin (floor (/ n 2)) (cons (mod n 2) ac))))
 
(defun bin (w)
  (read-from-string
   (apply
    #'concatenate
    'string
    "#b"
    (mapcar
     #'(lambda (a)
         (write-to-string a))
     w))))
 
(defun binary+ (&rest w)
  (deci-bin (reduce #'+ (mapcar #'bin w))))
 
> (binary+  '(1 0 1 1) '(1 1 1 0 0 1) '(1 0 1))
(1 0 0 1 0 0 1)

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

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

  1. Функция deci-bin принимает два аргумента: число n и список ac, представляющий двоичное число в виде списка. Если n равно нулю, то возвращается список ac. В противном случае, рекурсивно вызывается функция deci-bin для n равного целой части от деления n на 2 и список ac, к которому добавляется остаток от деления n на 2.
  2. Функция bin принимает строку w в качестве аргумента и возвращает строку, представляющую двоичное число, полученное из w. Сначала функция read-from-string считывает строку, а затем функция concatenate объединяет строку #b, представляющую двоичную систему счисления, и строку, полученную из w с помощью функции mapcar, которая применяет к каждому элементу w функцию write-to-string.
  3. Функция binary+ принимает произвольное количество аргументов в виде строк и возвращает сумму этих строк в двоичной системе счисления. Сначала функция reduce применяет оператор + к элементам списка, полученного с помощью функции mapcar, которая применяет функцию bin к каждому аргументу. Результат вычисления функции reduce передается в функцию deci-bin, которая преобразует полученное число в двоичную строку с помощью функции write-to-string. Пример использования функции binary+ демонстрирует, как функция применяется к трем спискам, представляющим двоичные строки (1 0 1 1), (1 1 1 0 0 1) и (1 0 1). Функция binary+ суммирует эти строки и возвращает результат (1 0 0 1 0 0 1).

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


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

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

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