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

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

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

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

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

textual
Листинг программы
  1. (defun deci-bin (n &optional ac)
  2.   (if (zerop n)
  3.       ac
  4.       (deci-bin (floor (/ n 2)) (cons (mod n 2) ac))))
  5.  
  6. (defun bin (w)
  7.   (read-from-string
  8.    (apply
  9.     #'concatenate
  10.     'string
  11.     "#b"
  12.     (mapcar
  13.      #'(lambda (a)
  14.          (write-to-string a))
  15.      w))))
  16.  
  17. (defun binary+ (&rest w)
  18.   (deci-bin (reduce #'+ (mapcar #'bin w))))
  19.  
  20. > (binary+  '(1 0 1 1) '(1 1 1 0 0 1) '(1 0 1))
  21. (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы