Из задаваемой списка нулей и единиц построить десятичное число - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д