Фортран или TeX в Хаскелл - PullRequest
3 голосов
/ 15 января 2012

Я символически оценил интеграл в FriCAS (Axiom fork) и хочу вставить результат как функцию в Haskell.Однако FriCAS может экспортировать вывод только в виде TeX, Fortran, MathML, html, texmacs.

Есть ли способ анализа формулы TeX в Haskell?Любые другие предложения?

Формула содержит + - * / ^ sqrt atan

Ответы [ 2 ]

3 голосов
/ 15 января 2012

Парсинг TeX в Haskell может показаться болезненным, тем более что это язык, полный Тьюринга; похоже, что пакет HaTeX имеет , планирует реализовать парсер , но пока ничего конкретного.

Если вы хотите сделать это в целях форматирования, я бы предложил выполнить синтаксический анализ MathML с помощью синтаксического анализатора XML (например, xml -роводит или hxt ) и обработать его вместо этого.

Основная проблема, с которой вы столкнетесь, заключается в том, что и TeX, и MathML будут описывать внешний вид формулы, а не ее семантику . 1 Из всех перечисленных форматов последний будет указывать только Fortran, но он также будет самым сложным для взаимодействия с Haskell. Наиболее практичным вариантом, вероятно, является компиляция кода на Фортране отдельно и использование его из Haskell с FFI.

Конечно, если все формулы, с которыми вы работаете, так просты, как подсказывает ваш вопрос, то вы можете обойтись извлечением функции из MathML.

1 MathML имеет возможность описывать семантику, а не внешний вид, но я не думаю, что он широко используется, и я сомневаюсь, что он достаточно точен для оценки компьютером.

2 голосов
/ 15 января 2012

Ответ относится только к FriCAS.Выходные данные могут быть получены в виде строки с ответом, как описано в списке рассылки FriCAS .Для меня это был

unparse(rootSimp((integrate(integrate(halfL - sqrt(r^2-x^2-y^2), y = (sqrt(r^2-halfL^2-x^2))..halfL, "noPole"), x = (sqrt(r^2-2*halfL^2))..halfL,"noPole")) :: Expression(DoubleFloat)) :: INFORM)

Синтаксис Spad очень похож на Haskell, однако unparse представляет sqrt как ^(1/(2.0)).Сделать это **0.5 - грязный хак, но в конце концов выигрыш в скорости от использования аналитической формулы вместо двумерной числовой интеграции покрывает неэффективность **.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...