Чтение из файла - Lisp

Узнай цену своей работы

Формулировка задачи:

Имеется следующая функция для возведения в степень.
(defun proba (x n)
 (cond ((= n 0) 1)
 (t (* x (proba x (- n 1)))))
)
Пытаюсь считать из файла с 1 строки число, со 2стр. степень. В ответ получаю keyword value missing. Ошибка подозреваю нубская , буду рад помощи и пояснениям
(defun read()
  (progn
   (setq ins (open "C:/LISP/input.txt"
    :direction:input))
     (setq x (read-line ins))
     (setq n (read ins))
    (close ins)
    (proba x n)
   )
)

Решение задачи: «Чтение из файла»

textual
Листинг программы
(defun foo (path)
  (with-open-file (i path :direction :input)
    (let ((x (parse-integer (read-line in)))
          (n (parse-integer (read-line in))))
      (proba x n))))

Объяснение кода листинга программы

В данном коде определен пользовательский функтор с именем foo. Он принимает один аргумент — путь к файлу. Внутри функтора используется комбинация конструкций с открытием файла и чтения из него. Вот список действий, которые происходят в этом коде:

  1. Открытие файла с указанным путем для чтения.
  2. Чтение первой строки из файла и преобразование ее в целое число, которое сохраняется в переменной x.
  3. Чтение второй строки из файла и преобразование ее в целое число, которое сохраняется в переменной n.
  4. Вычисление значения выражения x/n и сохранение его в переменной proba.
  5. Возврат значения переменной proba из функтора. Используется вспомогательная функция parse-integer, которая преобразует строку в целое число. Также используется комбинация конструкций с чтением из файла (read-line) и цикла let для создания локальных переменных x и n.

Оцени полезность:

9   голосов , оценка 4.111 из 5