从命令行运行Scheme

时间:2009-07-24 06:13:57

标签: linux command-line scheme

如何从linux(ubuntu)终端运行Scheme程序?另外如何在Scheme程序中接受来自命令行的参数?

编辑:我正在使用DrScheme实现。

4 个答案:

答案 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的实现方式。