Оценщик математических выражений, который включает единицы измерения

Аналогично этому вопросу, но отличается. Там много хороших ответов, но ни один из них не работает с единицами измерения.

Как насчет совместимого с .NET (даже через COM, если необходимо) оценщика математических выражений, который включает единицы измерения?

Я пробовал NCalc для безразмерных выражений. Я знаю, что F# может сделать это в коде. Калькулятор Google великолепен, но недоступен в качестве поддерживаемого API и не подходит в качестве службы для этого проекта.

Вот интересная статья на эту тему. Он охватывает расчеты единиц измерения, но не включает «аддитивные постоянные» преобразования, такие как градусы Цельсия в градусы Фаренгейта (по их заключению). И это поднимает хороший вопрос о веществе. «Галлоны бензина» против «галлонов молока». Единицы одни и те же, но субстанция другая, поэтому, возможно, библиотека должна рассматривать их как разные. А с правильными алхимическими уравнениями, сколько молока получается на галлон бензина? :-П

Можно ли подключить NCalc для достижения этой цели? Сколько работы потребовалось бы для усовершенствования NCalc в противном случае? Существуют ли какие-либо другие библиотеки, совместимые с .Net, которые могут обрабатывать единицы измерения?


person Jason Kleban    schedule 06.12.2011    source источник
comment
Вы можете оценивать выражения F# во время выполнения.   -  person CodesInChaos    schedule 07.12.2011
comment
F# великолепен, но он просто не подходит для этой ситуации, если только он не может принимать синтаксис, подобный googleCalc, не включать расширенные функции оценки, не связанные с выражениями, разрешать пользовательскую привязку символов/переменных и предоставлять полезные/простые ошибки, чтобы направлять пользователя к действительному выражение. Можете ли вы дать полный ответ, который действует как калькулятор Google?   -  person Jason Kleban    schedule 07.12.2011


Ответы (1)


FParsec кажется интересным! Это помогает только с этапами выражения parsing, но это похоже на большую часть битвы. Поддерживает компактные определения, подобные BNF, в F# и может предоставлять высококачественные сообщения об ошибках.

Dimensional Anaylsis по-прежнему является пользовательской задачей, но с правильно проанализированным AST сложно ли ее реализовать?

person Jason Kleban    schedule 13.12.2011