MIT-Scheme - 运行一个脚本并退出

8

我想在Makefile中执行脚本并退出,就像这样:

mit-scheme --load "fact.scm"

然而,在评估完文件后,它并不会退出,而是出现repl界面;如果尝试使用(exit)原始操作符,则需要确认[y/n]。是否有可能解决这个问题?


可能是[如何在MIT-Scheme中执行.scm脚本(在REPL之外)?]的重复问题(https://dev59.com/ZHNA5IYBdhLWcg3wk--A)。 - Flux
4个回答

8

让我们的命令自动关闭mit-scheme进程的标准输入,例如:

echo | mit-scheme --load sample.scm

我们可以将其扩展为一个脚本函数;这是我不太熟练的实现方式:
function mschm () {
   IFS=""
   for arg in $@
       do
           echo | mit-scheme --load $arg
       done
}

5

4
这有效;至少在11.2下,我没有收到任何关于(exit)的确认提示。
scheme --quiet --load filename --eval '(exit)'

我有一个很方便的shell函数,可以提供类似Python的调用体验:如果没有参数,则进入REPL(交互式命令行)模式,但如果有参数,则第一个参数将作为脚本名称,随后的所有参数则变成(command-line-arguments)。以下是该函数定义;按照写法,它可以在bash、ksh或zsh中工作:

function scm {
  if (( $# )); then
    typeset prog=$1
    shift
    scheme --quiet --load "$prog" --eval '(exit)' -- "$@"
  else
    scheme
  fi
 }

2
您可以在mit-scheme命令中添加--quiet参数来抑制默认输出。否则,这是 Charlie Forthmount 的函数的抄袭(尽管它只加载一个文件):
run-mit-scheme () 
{ 
    echo | mit-scheme --quiet --load $1;
    # Add an extra newline
    echo
}

如果你不是Emacs的粉丝,我建议你使用Dr. Racket和sicp包来获得完整的IDE体验,而不是像这样的脚本。请参阅https://dev59.com/jHVC5IYBdhLWcg3wixs0#262886。 - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接