Преобразовать список цифр в число - Lisp
Формулировка задачи:
2. L=(ln,...,li ...,l0) – список, элементами которого являются числа в диапазоне от 0 до 9. Подсчитать число, получающееся по правилу: ln*10n+... +li*10i+...+l0
Пример: (f ‘(1 2 3 4))
Результат: 1234
Решение задачи: «Преобразовать список цифр в число»
textual
Листинг программы
(define (list->number lst) (foldl (lambda (a b) (+ a (* 10 b))) 0 lst)) (let ((lst '((1 2 3 4) (1) ()))) (map list->number lst)) ;'(1234 1 0)
Объяснение кода листинга программы
В данном коде представлена функция list->number, которая принимает в качестве аргумента список lst и возвращает число. Она преобразует список цифр в число.
Алгоритм работы функции следующий:
foldlприменяет функциюa bк числу 0 и спискуlstв порядке обратном к порядку элементов списка.mapприменяет функциюlist->numberк каждому элементу спискаlst. В данном случае, списокlstсодержит два элемента:((1 2 3 4)и(1). Первый элемент списка преобразуется в число 1234, а второй элемент списка преобразуется в число 1. Результатом работы кода будет список(1234 1 0).