Как вы запускаете программы Scheme с терминала в linux (ubuntu)? Также как принимать аргументы из командной строки в программе Scheme?
Изменить: Я использую реализацию DrScheme.
Как вы запускаете программы Scheme с терминала в linux (ubuntu)? Также как принимать аргументы из командной строки в программе Scheme?
Изменить: Я использую реализацию DrScheme.
Реализация схемы DrScheme и имя, которое вы используете для ее выполнения из командной строки, mzscheme
. Документация для запуска командной строки script находится здесь: Unix Scripts (Документация по схеме PLT). Использование аргументов командной строки объясняется здесь: Разбор командной строки (Документация по схеме PLT).
В результате вы можете использовать скрипты shebang, например:
#! /usr/bin/env mzscheme
#lang scheme/base
(...scheme s-exps...)
или если вы хотите больше контролировать флаги командной строки для mzscheme
, вам нужно запустить script следующим образом:
#! /bin/sh
#|
exec mzscheme -cu "$0" ${1+"[email protected]"}
|#
#lang scheme/base
(...scheme s-exps...)
Функция, которую вы используете для обработки аргументов командной строки, command-line
. Вы найдете примеры того, как использовать его в статье, связанной со второй ссылкой.
Он не стандартизирован в R6RS. Существует рекомендация SRFI-22, которую поддерживают некоторые интерпретаторы. Если ваш интерпретатор не поддерживает SRFI-22, это зависит от вашей реализации.
Ниже приведен пример из SRFI. Предполагается, что ваш интерпретатор представляет собой двоичную именованную схему-r5rs. В основном он вызывает функцию с именем main с одним аргументом arg, который представляет собой список аргументов командной строки.
#! /usr/bin/env scheme-r5rs
(define (main arguments)
(for-each display-file (cdr arguments))
0)
(define (display-file filename)
(call-with-input-file filename
(lambda (port)
(let loop ()
(let ((thing (read-char port)))
(if (not (eof-object? thing))
(begin
(write-char thing)
(loop))))))))
Это решение работает для меня
#! /usr/bin/env guile
!#
(display "hello")
(newline)
Также как принимать аргументы из командной строки в программе Scheme?
Библиотека R6RS определяет функцию, называемую command-line
, которая возвращает список аргументов (первый из которых является именем программы). Однако не все реализации Scheme реализуют R6RS; ваша реализация может иметь некоторые другие функции для этого.
Как вы запускаете программы Scheme из терминал в linux (ubuntu)?
Это зависит от того, какую реализацию схемы вы используете.