【问题标题】:Running Scheme from the command line从命令行运行方案
【发布时间】:2009-07-24 06:13:56
【问题描述】:

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

编辑:我使用 DrScheme 实现。

【问题讨论】:

    标签: linux command-line scheme


    【解决方案1】:

    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。您将在第二个链接所链接的文章中找到如何使用它的示例。

    【讨论】:

    • 还要注意,要从 DrScheme 测试这样的脚本,您可以弹出语言选择对话框(ctrl+L),然后单击“显示详细信息”按钮,在右侧您将拥有输入脚本将看到的命令行参数的地方。
    • 它如何与 MIT Scheme 一起工作?我找不到这方面的任何文档。
    【解决方案2】:

    R6RS 中没有标准化。有一个建议SRFI-22,一些口译员支持。如果您的解释器不支持 SRFI-22,那么这取决于您的实现。

    以下是来自 SRFI 的示例。它假定您的解释器是一个名为 scheme-r5rs 的二进制文件。基本上它调用一个名为 main 的函数,它带有一个 arg,它是一个命令行 args 列表。

    #! /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))))))))
    

    【讨论】:

      【解决方案3】:

      这个解决方案适合我

      #! /usr/bin/env guile
      !#
      
      (display "hello")
      (newline)
      

      【讨论】:

        【解决方案4】:

        还有如何接受来自 Scheme程序中的命令行?

        R6RS 库定义了一个名为command-line 的函数,它返回参数列表(第一个是程序的名称)。不过,并非所有 Scheme 的实现都实现了 R6RS。您的实现可能有一些其他功能。

        如何运行 Scheme 程序 linux(ubuntu)中的终端?

        这取决于您使用的 Scheme 实现。

        【讨论】:

          猜你喜欢
          • 2018-01-30
          • 2013-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-07
          • 2013-10-17
          • 2015-09-01
          • 2016-06-16
          相关资源
          最近更新 更多