除了GIMP的script-fu外,我从未使用过任何其他实现,而且我对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!tx)...将不起作用。
您的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
when的值s
,则创建s
一个函数:
(define (s) x)
然后,表达式(s)
将返回x
当前绑定的任何内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句