2013-10-07 30 views
2

我從來沒有使用任何其他實現,但GIMP的腳本-fu,我甚至對GIMP的計劃來說也是新的。所以,也許我錯了。但是,下列不腳本富控制檯工作:如何在GIMP計劃中取消引用

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

這應該多次運行,所以(設置T!X)...將無法​​正常工作。

+0

在任何實現中,'unquote'不會以您認爲的方式工作。另外,我不明白你的意思是「(set!t x)'不起作用」。 –

+0

特別是,['unquote'不是'eval'](http://stackoverflow.com/q/18515295/13),您也不應該使用'eval'。 –

+0

我先嚐試過'(set!t x)',但沒有奏效。它只將值交換一次,永不再次。我認爲值x和y已經在「定義時間」中進行了評估。現在我又試了一次,並且工作。我不知道,我做錯了什麼。謝謝。 – FERcsI

回答

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的當前值而不是綁定到時s分配x值,然後進行s功能:

(define (s) x) 

則表達式(s)將返回任何x當前綁定到。

+0

這是我嘗試的第一件事,但它不起作用(這是我在我的文章中寫的)。它只將值交換一次,永不再次。我認爲值x和y已經在「定義時間」中進行了評估。現在我又試了一次,並且工作。我不知道,我做錯了什麼。謝謝。 – FERcsI