如何在GIMP计划中取消引用

时间:2013-10-07 10:30:04

标签: scheme gimp script-fu

我从未使用任何其他实现,而不是GIMP的脚本,我甚至对GIMP的Scheme也很陌生。所以,也许我错了。但是,以下内容在Script-Fu控制台中不起作用:

(define x 13)
(define s 'x) ; or (define s `x)
,s => Error: eval: unbound variable: unquote 

类似地

(unquote s) => Error: eval: unbound variable: unquote 

在我看来,“,”计划起作用,但尚未实施。 如果是这样,我该如何解决以下问题?

(define x 13)
(define y 7)
; define procedure to swap x and y
(define (swap) 
  (let ((t 0))
    (set! t ,'x)
    (set! x ,'y)
    (set! y t)
  )
)

这应该多次运行,因此(set!t x)... 将无效。

1 个答案:

答案 0 :(得分:0)

您的swap功能将起作用:

(define (swap)
  (let ((t 0))
    (set! t x)
    (set! x y)
    (set! y t)))

因为set!是一个语法关键字,专门用于评估其参数。第一个参数(上面t中第一个set!表达式中的swap)未被评估;而是用于识别位置。计算第二个参数(x),在这种情况下,返回标识符(x)引用的位置中保存的值。

语法关键字define的工作方式类似。第一个参数未被评估;它用于创建一个新的位置;评估第二个参数。因此,对于您的示例,只需使用unquote即可:

(define s x)

如果您尝试定义s,那么它会返回x的当前值,而不是在分配x时绑定到s的值,然后生成{{ 1}}一个函数:

s

然后表达式(define (s) x) 将返回当前绑定的(s)