2011-09-07 86 views
0

我不得不創建一個簡單的方案程序,輸出二叉樹的內容。我設法完成了該程序,但它輸出了所有的報價。我如何擺脫它們?如何從計劃中的符號中刪除引號?

(define bintree 
'(interior-node 
    'foo 
    (interior-node 'bar (leaf 26) (leaf 12)) 
    (interior-node 'baz (leaf 11) 
     (interior-node 'quux (leaf 117) (leaf 14))))) 

(print-bintree bintree) returns ('foo ('bar 26 12) ('baz 11 ('quux 117 14))) 

我想它返回(foo (bar 26 12) (baz 11 (quux 117 14)))不就可以了'馬克。

回答

3

很難說如果沒有看到整個程序(特別是print-bintree的定義),但它看起來像是對引用如何工作的一個簡單的誤解。

特別是,在開放詞典之前的引用意味着對象的內容以簡單的「數據語言」進行解釋,其中字符序列被解釋爲符號而不是變量。

要明白我的意思,讓我們嘗試評估一些簡單的表情

(zippy tong) 

...產生大約zippytong是不確定的一些錯誤。

現在試試這個:

'(zippy tong) 

結果將取決於您的打印機上了一點,但它會產生同樣的事情

(list 'zippy 'tong) 

也就是說,領先的報價方式zippytong被解釋爲符號,而不是變量。

在你的代碼,你寫:

'(interior-node 'foo ...) 

這裏的問題是,您使用的是報價時,你已經是一個引用表達式中。這不是你想做的。特別是,它會產生對

(list 'interior-node (list 'quote 'foo) ...) 

因此,一些等價的,沒有得到任何進一步進入報價的魔力,它可能會足以刪除您二叉樹的定義中從'foo'bar等引號。

+0

是的。我剛剛意識到我誤解了輸入並將函數名稱視爲符號。 – beowulf500ad