我从未使用任何其他实现,而不是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)... 将无效。
答案 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)
。