我正在学习Scheme。我想为Gimp构建 script-fu 过滤器,所以我使用 tinyscheme 来执行我制作的脚本,但似乎 tinyscheme 一组非常有限的函数,如max
,min
和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)))
答案 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