在linux(ubuntu)中如何从终端运行Scheme程序?另外如何在Scheme程序中接受来自命令行的参数?
编辑:我正在使用 DrScheme 实现。
DrScheme 方案实现以及用于从命令行执行它的名称是
mzscheme
。用于启动命令行脚本的文档可在此处找到:Unix 脚本(PLT 方案文档)。命令行参数的使用解释如下:命令行解析(PLT 方案文档)。
结果是你可以像这样使用 shebang 脚本:
#! /usr/bin/env mzscheme
#lang scheme/base
(...scheme s-exps...)
或者如果您想更多地控制
mzscheme
的命令行标志,您需要像这样启动脚本:
#! /bin/sh
#|
exec mzscheme -cu "$0" ${1+"$@"}
|#
#lang scheme/base
(...scheme s-exps...)
用于处理命令行参数的函数是
command-line
。您将在第二个链接链接的文章中找到如何使用它的示例。
R6RS 中未标准化。有一个建议 SRFI-22,一些口译员支持该建议。如果您的解释器不支持 SRFI-22,那么这取决于您的实现。
以下是 SRFI 的示例。它假设您的解释器是一个名为scheme-r5rs 的二进制文件。基本上,它使用一个参数调用一个名为 main 的函数,该参数是命令行参数列表。
#! /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)
还有如何接受来自 方案程序中的命令行?
command-line
的函数,它返回参数列表(第一个是程序的名称)。不过,并非所有方案的实现都实现 R6RS;您的实现可能还有其他一些功能。
如何运行Scheme程序 linux(ubuntu)中的终端?
这取决于您使用的方案的实现。
Linux bash: $ cat myfile.scm |方案