Что эквивалентно выражению 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. Полученные выражения могут быть оценены с помощью или без помощи песочницы.

Другие вопросы по тегам