Подтвердить что ты не робот

Как я могу выполнить .scm script (вне REPL) с помощью MIT-Scheme?

Я хочу напечатать что-то вроде "schem file.scm" и интерпретировать его, а затем вернуть обратно в свою оболочку, а не загружать ее в REPL.

edit: Я попробовал схему < test.scm, и он по-прежнему использует REPL, единственное отличие заключается в том, что схема завершается, когда поток заканчивается.

4b9b3361

Ответ 1

scheme < file.scm должен работать (если вы не укажете --interactive, а stdin не является терминалом, схема работает не в интерактивном режиме).

Ответ 2

Чтобы запустить программу схемы с использованием MIT Scheme:

scheme --quiet < program.scm

Опция --quiet гарантирует, что вывод из вашей программы - это единственное, что отображается (т.е. вы не увидите REPL в соответствии с вашими требованиями).

Предостережение: это не будет работать, если ваша программа запрашивает у пользователя ввод данных с использованием процедур ввода (например, read, read-char, read-line и т.д.). Это из-за перенаправления ввода оболочки (<) (см.: соответствующий вопрос). К сожалению, в настоящее время нет подходящего способа выполнения сценария MIT Scheme из командной строки при использовании процедур ввода. Наилучшим вариантом, вероятно, является mit-scheme --quiet --load 'myscript', но вам придется вручную выйти из схемы MIT, когда сценарий завершится. Соответствующая ветка списка рассылки: [MIT-Scheme-devel] Как запустить скрипт и выйти?

ОБНОВЛЕНИЕ: Из-за возможности, что вы можете ошибочно ввести < как >, что приведет к перезаписи вашего исходного кода, я бы предложил инкапсулировать вышеупомянутую команду в сценарий оболочки или функцию оболочки. Например:

runscheme () {
    scheme --quiet < "$1"
}

Затем вы можете запустить runscheme program.scm, не опасаясь, что ваш исходный код будет перезаписан. (Особая благодарность Полу Руни за доведение этой потенциальной ошибки до моего сведения).

Ссылки

scheme --help:

--batch-mode, --quiet, --silent

Подавляет отчет о запуске версий и авторских прав, а также прощальная речь.

Этот параметр командной строки, по-видимому, ошибочно пропущен из списка параметров командной строки в документации, но я думаю, что это допустимый параметр командной строки, потому что scheme --help показывает его, а также потому, что --batch-mode используется в других частях справочного руководства (например, здесь).

Ответ 4

отмечен chez --help, а затем я нашел это (скажем, что я использую схему chez):

chez --script ./temp.scm

Кроме того, --verbose очень полезен:

chez --verbose --script ./temp.scm