从命令行运行Scheme

问题描述 投票:0回答:5

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

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

linux command-line scheme
5个回答
9
投票

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


3
投票

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))))))))

2
投票

这个解决方案对我有用

#! /usr/bin/env guile
!#

(display "hello")
(newline)

1
投票

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

R6RS 库定义了一个名为

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

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

这取决于您使用的方案的实现。


0
投票

Linux bash: $ cat myfile.scm |方案

© www.soinside.com 2019 - 2024. All rights reserved.