Как убрать цитату из символа в схеме? - PullRequest
0 голосов
/ 07 сентября 2011

Мне пришлось создать простую схему программы, которая выводит содержимое двоичного дерева. Мне удалось завершить программу, но она выводит все цитаты вместе с ней. Как мне от них избавиться?

(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 Ответ

3 голосов
/ 07 сентября 2011

Трудно сказать, не видя всей программы (в частности, определение print-bintree), но это выглядит как простое недоразумение о том, как работает цитата.

В частности, кавычка перед открытым пареном означает, что содержимое пареннов интерпретируется на простом «языке данных», где последовательности символов интерпретируются как символы, а не как переменные.

Чтобы понять, что я имею в виду, давайте попробуем оценить несколько простых выражений

(zippy tong)

... выдает ошибку о том, что zippy и tong не определены.

Теперь попробуйте это:

'(zippy tong)

Результат будет немного зависеть от вашего принтера, но он выдаст то же самое, что и

(list 'zippy 'tong)

То есть ведущая кавычка означает, что zippy и tong интерпретируются как символы, а не как переменные.

В своем коде вы пишете:

'(interior-node 'foo ...)

Проблема в том, что вы используете кавычку, когда уже находитесь внутри выражения в кавычках. Это не делает то, что вы хотите. В частности, он будет производить что-то эквивалентное

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

Так что, не углубляясь в магию цитаты, вероятно, будет достаточно удалить кавычки из 'foo, 'bar и т. Д. Внутри вашего определения bintree.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...