Чтение из файла и сумма списка (массива) - Lisp
Формулировка задачи:
Необходимо открыть файл вроде:
или
Затем добавить эти элементы в список (так как в лиспе нет массивов), и вычислить сумму этого списка.
Не получилось правильно считать числа с файла и добавить их в список, сколько не пытался, не могу.
Заранее благодарю за помощь.
6 1 2 3 4 5 6
1 2 3 4 5 6
Решение задачи: «Чтение из файла и сумма списка (массива)»
textual
Листинг программы
(defn task [filename] (-> filename slurp (clojure.string/replace #"\r\n" " ") (as-> tmp (str "(+ " tmp ")")) read-string eval)) ;; => #'user/task (task "M:/Users/smoke/Desktop/text.txt") ;; => 55
Объяснение кода листинга программы
- В данном коде определен анонимный функтор (lambda) с именем task, который принимает один аргумент filename.
- Функция task использует оператор -> для последовательного применения четырех когнитивных функций к аргументу filename.
- Первая функция slurp используется для чтения содержимого файла filename.
- Вторая функция clojure.string/replace заменяет все символы новой строки
\r\n
на пробел - Третья функция as-> используется для создания временной переменной tmp, которая будет содержать результат замены символов новой строки на пробел.
- Четвертая функция str используется для создания строки
(+
с добавлением значения переменной tmp. - Пятая функция read-string используется для чтения строки, созданной в предыдущем шаге, как кода.
- Шестая функция eval используется для выполнения кода, прочитанного в предыдущем шаге.
- Функция task возвращает результат выполнения кода, который является суммой списка (массива).
- В конце кода вызывается функция task с аргументом
M:/Users/smoke/Desktop/text.txt
. - Результатом выполнения кода будет число 55.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д