Передача аргументов из текстового файла в Lisp?

все. Недавно я начал играть с (Common) Lisp и прямо сейчас пытаюсь понять, как использовать его с содержимым некоторых текстовых файлов. У меня есть test.lisp:

(defun double (x)
    (* 2 x))

(defun main (arg)
    (print (double arg))
(quit))

и я скомпилировал его с

клисп -c -q test.lisp

и запустил его с терминала Linux с помощью

clisp -q -q -x '(progn (загрузить "тест") (основной 10) (выйти))'

который дал мне вывод «20». Так что это работает нормально, но есть ли способ передать 10 из текстового файла (testing.txt) куда-нибудь? А может быть, даже из вывода какой-нибудь программы, написанной на Си, например? Я знаю, что передача только одного аргумента тривиальна, но я перейду к нескольким аргументам, как только узнаю, как передать хотя бы один аргумент. Команда, которую я использую для ее запуска, на самом деле просто выглядит так, будто я добавляю три команды/функции в REPL, так что, может быть, есть другой способ запустить файл, который мне не хватает?

Может быть, это бессмысленный вопрос, но если есть способ сделать что-то подобное, я был бы признателен за помощь.

Заранее спасибо.


person nandom    schedule 11.04.2014    source источник
comment
Итак, давайте начнем с вашей конечной цели. Это чтобы получить вывод программы C? Или просто содержимое файла? Или что-то совсем другое? почему имеет огромное значение, и это важно сформулировать в вопросе.   -  person Chris Jester-Young    schedule 11.04.2014
comment
Извините, я не знал, что это так важно. Моя цель здесь — просто передать значения из текстового файла в качестве аргументов, в данном случае, для моей «основной» функции. Как я уже сказал, это может быть бессмысленным вопросом, потому что у меня не обязательно есть конечная цель, мне просто любопытно. Ради поиска ответа, скажем, моя цель - запустить вывод программы на C или Java через мою функцию Lisp «main».   -  person nandom    schedule 11.04.2014
comment
Это не должно быть сложно. Вы смотрели функции управления файлами для CL (например,, gigamonkeys.com/book/files-and-file-io.html)?   -  person lurker    schedule 11.04.2014
comment
@nandom Хорошо, похоже, что ваша конечная цель — любопытство. Это нормально. Я прошу об этом, чтобы предотвратить проблему XY: если есть реальная проблема, которую вы пытаетесь решить , лучше заранее знать, что это такое. :-) Но, как я уже сказал, любопытство тоже хорошо.   -  person Chris Jester-Young    schedule 11.04.2014
comment
@lurker О, ты прав. Это хороший ресурс, спасибо :) Наверное, я просто привык использовать кошку для передачи аргументов, ха-ха. Я думаю, что я могу работать с этим, хотя, спасибо. Виноват.   -  person nandom    schedule 11.04.2014
comment
@nandom У меня есть вопрос, потому что это такой необычный запрос. Как вы обычно разрабатываете lisp, какие инструменты (если есть) используете? Я спрашиваю, потому что цикл кода/компиляции/запуска для lisp очень отличается от многих языков, и для стандартной разработки вы, конечно, не хотите кодировать lisp по шаблону, который вы описали выше. Конечно, если это просто для любопытства, то получайте удовольствие!   -  person Baggers    schedule 11.04.2014


Ответы (1)


Используйте with-open-file, чтобы открыть файл (он открывает файл и автоматически закрывает его, когда выполнение выходит за рамки).

Если у вас есть такой текстовый файл:

13
19

вы можете загрузить и добавить эти числа следующим образом:

(with-open-file (in #p"foo" :direction :input)
  (let ((numbers (loop :for line := (read-line in nil)
                       :while line
                       :collect (parse-integer line))))
    (reduce #'+ numbers)))
person Svante    schedule 11.04.2014