2011-09-07 7 views
0

私はバイナリツリーの内容を出力する簡単なスキームプログラムを作成しなければなりませんでした。私はプログラムを完了することができましたが、それを使ってすべての引用を出力します。どうすればそれらを取り除くことができますか?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)))を返すようにしたいです。

答えて

3

プログラム全体(特に、print-bintreeの定義)を見ることなく言い表すのは難しいですが、見積もりの​​仕組みについての簡単な誤解のようです。

特に、開いている括弧の前の引用は、括弧の内容が変数ではなく記号として解釈される単純な「データ言語」で解釈されることを意味します。

だが、いくつかの単純な式

(zippy tong) 

を評価してみましょう、私が何を意味するかを確認するには... zippytongが未定義であることについて、いくつかのエラーを生成します。今

、この試してみてください。結果は、お使いのプリンタにビットに依存しようとしているが、それは、主要な引用手段である

(list 'zippy 'tong) 

と同じものを生産する

'(zippy tong) 

zippytongは、変数ではなくシンボルとして解釈されます。あなたのコードで

、あなたが書いた:

'(interior-node 'foo ...) 

ここでの問題は、あなたが引用された式の中、すでにしているときに引用符を使用していることです。これはあなたが望むことをしていません。特に、それは引用の魔法にさらにいずれかを得ることなく、

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

と同等のものを生成します、それはおそらくbintreeのあなたの定義の中'foo'barなどから引用符を削除するには十分であろう。

+0

はい。私はちょうど私が入力を誤読していて、関数名を記号として扱っていることに気づいた。 – beowulf500ad

関連する問題