1

我正在学习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)))
4

1 回答 1

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

编辑

根据 Mike Sperber 在Scheme48 邮件列表上的帖子,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
于 2013-01-02T18:13:07.027 回答