2011-09-07 53 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