Я пишу схему интерпретатора в схеме (ну, Ракетка).В моей функции parse / eval у меня есть следующее правило:
(quotation [(Q datum) (string->symbol $2)])
string->symbol
, по-видимому, неверное определение quote
в таком интерпретаторе.
Я пробовал много другихпути, но ни один из них не работал.Конечно, если я попытаюсь использовать функцию Racket quote
, она не будет работать, так как $2
интерпретируется буквально, поэтому все оценивается как $2
.
Теперь, если я оценю некоторые примеры вREPL:
$> (eval '1)
$> 1
$> (eval '#f)
$> #f
$> (eval 's)
$> s
VS.Ракетка REPL:
$> (eval '1)
$> 1
$> (eval '#f)
$> #f
$> (eval 's)
$> 's
Обратите внимание на разницу: (eval 's) -> s в моем, -> ' в Racket.Кроме того, выполнение (symbol? (eval x))
также ведет себя по-разному.
Как я должен реализовать quote
в таком случае?