Даны два двоичных числа в виде списков, нужно их сложить - 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+
, которая принимает произвольное количество аргументов в виде двоичных строк и возвращает их сумму в двоичной системе счисления.
- Функция
deci-bin
принимает два аргумента: числоn
и списокac
, представляющий двоичное число в виде списка. Еслиn
равно нулю, то возвращается списокac
. В противном случае, рекурсивно вызывается функцияdeci-bin
дляn
равного целой части от деленияn
на 2 и списокac
, к которому добавляется остаток от деленияn
на 2. - Функция
bin
принимает строкуw
в качестве аргумента и возвращает строку, представляющую двоичное число, полученное изw
. Сначала функцияread-from-string
считывает строку, а затем функцияconcatenate
объединяет строку#b
, представляющую двоичную систему счисления, и строку, полученную изw
с помощью функцииmapcar
, которая применяет к каждому элементуw
функциюwrite-to-string
. - Функция
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)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д