Что эквивалентно выражению Mathematica в Racket?
Я ищу что-то похожее на ToExpression, которое доступно в Mathematica. Я просто хочу преобразовать строку в выражение и оценить выражение. В качестве первого прохода мои строки будут содержать только числа и арифметические операторы, а не даже скобки.
Если мне нужно написать это, пожалуйста, укажите мне направление соответствующих предопределенных модулей / определений, которые я должен использовать.
3 ответа
Может быть, вы можете использовать этот анализатор для выражений инфикса.
http://planet.racket-lang.org/package-source/soegaard/infix.plt/1/0/planet-docs/manual/index.html
Вот небольшой пример (для установки библиотеки требуется некоторое время - кажется, что в наши дни старый набор тестов Schematics требует вечной установки - мне нужно переключиться на встроенный).
#lang at-exp racket
(require (planet soegaard/infix)
(planet soegaard/infix/parser))
(display (format "1+2*3 is ~a\n" @${1+2*3} ))
(parse-expression #'here (open-input-string "1+2*3"))
Выход будет:
1+2*3 is 7
.#<syntax:6:21 (#%infix (+ 1 (* 2 3)))>
Функция parse-expression анализирует выражение в строке и возвращает синтаксический объект, который напоминает выходные данные ToExpression.
Относится ли раздел о динамической оценке к вашему вопросу? Вы можете анализировать строки в выражениях, используя комбинацию read и open-input-string. Полученные выражения могут быть оценены с помощью или без помощи песочницы.