如何使用scheme48正确执行程序?

yey*_*eyo 2 linux scheme scheme48

我正在学习Scheme。我想为 Gimp 构建script-fu过滤器,所以我使用tinyscheme来执行我制作的脚本,但似乎tinyscheme的功能非常有限,缺少maxmin和等功能even?。(我希望有人能在这里证明我错了:()

好吧,实际上,我只想用scheme48执行一个Scheme脚本。我怎么做?

例如,如何使用scheme48执行以下文件?

(define (addx inNum inX)
  (if (> (* inNum inX) 999) 0
      (+ (* inNum inX) (addx inNum (+ 1 inX)))))

(display 
  (- (+ (addx 3 1) (addx 5 1)) (addx 15 1)))
Run Code Online (Sandbox Code Playgroud)

小智 5

我也无法成功使用scheme48运行scheme脚本(并且我无法\xe2\x80\x99t在手册中找到提示)。您也可以使用 Guile (假设您正在使用 Linux 或类似的东西):

\n\n
#!/usr/local/bin/guile -s\n!#\n\n(define (addx in-num in-x)\n  (if (>  (* in-num in-x) 999)\n      0\n      (+ (* in-num in-x) (addx in-num (+ 1 in-x)))))\n\n(display (- (+ (addx 3 1) (addx 5 1)) (addx 15 1)))\n(newline)\n
Run Code Online (Sandbox Code Playgroud)\n\n

保存然后运行:

\n\n
$chmod u+x test.scm\n./test.scm \n233168\n$\n
Run Code Online (Sandbox Code Playgroud)\n\n

(顺便说一句:请不要像C那样格式化Scheme \xe2\x80\x99t)。

\n\n

编辑

\n\n

根据 Mike Sperber 在Scheme48 邮件列表上的帖子,shebanging 是行不通的。显式调用Scheme48 的方式如下:

\n\n
#!/bin/bash\nscheme48 -a batch << EOF\n(letrec ((fac (lambda (n)\n             (if (= n 1)\n                 1\n                 (* n (fac (- n 1)))))))\n (fac 5))\nEOF\n\n$ ./test.scm\n120\n
Run Code Online (Sandbox Code Playgroud)\n