Из задаваемой списка нулей и единиц построить десятичное число - Lisp
Формулировка задачи:
Решение задачи: «Из задаваемой списка нулей и единиц построить десятичное число»
(defun bin-deci (m w &optional (n 0)) (if (null w) n (bin-deci m (cdr w) (+ (car w) n n)))) (defun bin-decim (m w) (bin-deci m (subseq w 0 m))) > (bin-decim 3 '(1 0 0 0 1)) 4 > (bin-decim 4 '(1 0 0 0 1)) 8 > (bin-decim 5 '(1 0 0 0 1)) 17
Объяснение кода листинга программы
В коде представлена функция bin-decim, которая принимает три аргумента: m, w и n. Первые два аргумента - это m и w, которые являются списками. Третий аргумент n - это число, инициализирующее результат. Если третий аргумент не задан, он по умолчанию равен 0.
В функции bin-decim используется рекурсивный подход для преобразования бинарного числа в десятичное. Функция проверяет базовый случай, когда список w пуст. Если это так, она возвращает значение n. В противном случае она вызывает саму себя с m равным w, и n равным сумме car w и n.
Вторая функция bin-deci - это вспомогательная функция, которая принимает два аргумента: m и w. Она просто вызывает bin-decim с аргументами m и w, ограничивая список w до m элементов.
Примеры вызовов функций показывают, как работает код. Первый пример (bin-decim 3 '(1 0 0 0 1)) преобразует бинарное число (1 0 0 0 1) длиной 5 в десятичное число 4. Второй пример (bin-decim 4 '(1 0 0 0 1)) преобразует бинарное число (1 0 0 0 1) длиной 5 в десятичное число 8. Третий пример (bin-decim 5 '(1 0 0 0 1)) преобразует бинарное число (1 0 0 0 1) длиной 5 в десятичное число 17.