Даны два двоичных числа в виде списков, нужно их сложить - 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).