如何从方案中的符号中删除引号?

时间:2011-09-07 18:57:08

标签: scheme

我必须创建一个输出二叉树内容的简单方案程序。我设法完成了程序,但它输出了所有引号。我如何摆脱它们?

(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)))而不带'标记。

1 个答案:

答案 0 :(得分:3)

很难说没有看到整个程序(特别是print-bintree的定义),但它看起来像一个关于引用如何工作的简单误解。

特别是,在开放paren之前的引用意味着parens的内容被解释为一种简单的“数据语言”,其中字符序列被解释为符号而不是变量。

要明白我的意思,让我们尝试评估一些简单的表达式

(zippy tong)

...产生一些关于zippytong未定义的错误。

现在,试试这个:

'(zippy tong)

结果将取决于你的打印机,但它会产生与

相同的东西
(list 'zippy 'tong)

也就是说,引号表示zippytong被解释为符号,而不是变量。

在你的代码中,你写道:

'(interior-node 'foo ...)

这里的问题是,当你已经在引用的表达式中时,你正在使用引号。这不是你想要的。特别是,它会产生相当于

的东西
(list 'interior-node (list 'quote 'foo) ...)

因此,如果没有进一步了解引用的魔力,可能只需删除bintree定义中'foo'bar等引号。