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

时间:2013-01-02 17:27:31

标签: linux scheme scheme48

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

好的,实际上,我只想用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)))

1 个答案:

答案 0 :(得分:4)

我也无法成功运行scheme48的方案脚本(我在手册中找不到提示)。您也可以使用Guile(假设您正在使用Linux或类似的东西):

#!/usr/local/bin/guile -s
!#

(define (addx in-num in-x)
  (if (>  (* in-num in-x) 999)
      0
      (+ (* in-num in-x) (addx in-num (+ 1 in-x)))))

(display (- (+ (addx 3 1) (addx 5 1)) (addx 15 1)))
(newline)

保存,然后运行:

$chmod u+x test.scm
./test.scm 
233168
$

(顺便说一下:请不要像C那样格式化Scheme。)

修改

根据迈克斯佩尔伯在Scheme48 mailing list的帖子,shebanging将无效。显式调用Scheme48就是这样做的:

#!/bin/bash
scheme48 -a batch << EOF
(letrec ((fac (lambda (n)
             (if (= n 1)
                 1
                 (* n (fac (- n 1)))))))
 (fac 5))
EOF

$ ./test.scm
120