Ракетка- конвертируемая ежедневно используется + - * / - PullRequest
0 голосов
/ 20 января 2019

Я столкнулся с проблемой, когда я хотел бы оценить математическое уравнение, скажем, список строк ' (1 + 2) и преобразовать его в (+ 1 2), чтобы ракетка могла его решить. Видимо, вы не можете просто сделать ('+ 1 2), так как '+ не процедура. Какие есть способы сделать это?

1 Ответ

0 голосов
/ 21 января 2019

После преобразования выражения из инфиксной в префиксную нотацию просто используйте eval:

(define ns (make-base-namespace))
(eval (list '+ 1 2) ns)
=> 3

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

...