如何从linux(ubuntu)终端运行Scheme程序?另外如何在Scheme程序中接受来自命令行的参数?
编辑:我正在使用DrScheme实现。
答案 0 :(得分:9)
DrScheme方案实现以及用于从命令行执行它的名称是mzscheme
。有关启动命令行脚本的文档,请访问:Unix Scripts (PLT Scheme documentation)。这里解释了命令行参数的使用:Command-line Parsing (PLT Scheme Documentation)。
结果是你可以使用像这样的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
。您将在第二个链接链接到的文章中找到如何使用它的示例。
答案 1 :(得分:3)
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))))))))
答案 2 :(得分:2)
此解决方案适合我
#! /usr/bin/env guile
!#
(display "hello")
(newline)
答案 3 :(得分:1)
另外如何接受来自的论点 Scheme程序中的命令行?
R6RS库定义了一个名为command-line
的函数,它返回参数列表(第一个是程序的名称)。并非所有Scheme的实现都实现了R6RS;您的实现可能还有其他功能。
如何从中运行Scheme程序 linux中的终端(ubuntu)?
这取决于您正在使用的Scheme的实现方式。