从命令行运行Scheme

你如何从terminal在Linux(Ubuntu的)运行Scheme程序? 另外如何接受Scheme程序中命令行的参数?

编辑:我使用DrScheme实现。

Solutions Collecting From Web of "从命令行运行Scheme"

DrScheme方案实现以及用于从命令行执行的名称是mzscheme 。 用于启动命令行脚本的文档可以在这里找到: Unix脚本(PLT Scheme文档) 。 命令行参数的使用在这里解释: 命令行解析(PLT Scheme Documentation) 。

结果是你可以使用像这样的shebang脚本:

 #! /usr/bin/env mzscheme #lang scheme/base (...scheme s-exps...) 

或者如果您想要更多地控制mzscheme的命令行标志, 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的函数,其中一个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; 你的实现可能有一些其他的功能。

你如何从终端在Linux(Ubuntu的)运行Scheme程序?

这取决于你正在使用的Scheme的哪个实现。