我必须创建一个输出二叉树内容的简单方案程序。我设法完成了程序,但它输出了所有引号。我如何摆脱它们?
(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)))
而不带'
标记。
答案 0 :(得分:3)
很难说没有看到整个程序(特别是print-bintree的定义),但它看起来像一个关于引用如何工作的简单误解。
特别是,在开放paren之前的引用意味着parens的内容被解释为一种简单的“数据语言”,其中字符序列被解释为符号而不是变量。
要明白我的意思,让我们尝试评估一些简单的表达式
(zippy tong)
...产生一些关于zippy
和tong
未定义的错误。
现在,试试这个:
'(zippy tong)
结果将取决于你的打印机,但它会产生与
相同的东西(list 'zippy 'tong)
也就是说,引号表示zippy
和tong
被解释为符号,而不是变量。
在你的代码中,你写道:
'(interior-node 'foo ...)
这里的问题是,当你已经在引用的表达式中时,你正在使用引号。这不是你想要的。特别是,它会产生相当于
的东西(list 'interior-node (list 'quote 'foo) ...)
因此,如果没有进一步了解引用的魔力,可能只需删除bintree定义中'foo
,'bar
等引号。