В интерпретаторе схемы в схеме, как реализовать «цитата»? - PullRequest
0 голосов
/ 09 июня 2018

Я пишу схему интерпретатора в схеме (ну, Ракетка).В моей функции 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 в таком случае?

1 Ответ

0 голосов
/ 09 июня 2018

Итак, как указано в комментариях, это проблема печати REPL, и правильная реализация:

(quotation [(Q datum) $2])

Спасибо тем, кто мне помог!

...