Являются ли единицы измерения уникальными для F#?[закрыто]
-
01-07-2019 - |
Вопрос
Я читал серию постов в блоге Эндрю Кеннеди на единицы измерения в F# и во многих случаях это имеет большой смысл.Есть ли еще языки с такой системой?
Редактировать:Чтобы быть более понятным, я имею в виду гибкую систему единиц измерения, в которой вы можете произвольно определять свои собственные.
Решение
Учитывается ли TI-89 BASIC?Входить 54_kg * (_c^2)
и он даст вам ответ в джоулях.
Кроме этого, я не могу припомнить ни одного языка, в который бы он был встроен, но любой язык с приличным объектно-ориентированным подходом должен упростить создание собственного.Это означает, что кто-то другой, вероятно, уже это сделал.
Гугл подтверждает.Например, вот один на Python. __repr__
можно легко изменить, чтобы также выбрать наиболее подходящую производную единицу и т. д.
CPAN имеет несколько модулей для Perl: Физика::Единица, Данные::Размеры, Класс::Мера, Math::Units::PhysicalValue, и несколько других, которые преобразуют, но на самом деле не объединяют значения с единицами измерения.
Другие советы
В 2006 году Nemerle проверила компиляторы единиц измерения.
http://nemerle.org/forum.old/viewtopic.php?t=265&view=previous&sid=00f48f33fafd3d49cc6a92350b77d554
В C++ это есть в виде повышение::единицы.
Я не уверен, действительно ли это имеет значение, но RPL
Система моего калькулятора HP-48 имеет аналогичные функции.я могу написать 40_gal 5_l +
и получим правильный ответ 156,416 литров.
Я верю, что видел это Крепость поддержите это, я посмотрю, смогу ли я найти ссылку.
Я не могу найти конкретную ссылку, но в спецификации языка она упоминается в нескольких местах.В спецификации языка 1.0 также говорится, что измерения и единицы измерения были временно исключены из спецификации (вместе с целой кучей других функций), чтобы они соответствовали текущей реализации.Работа еще продолжается, так что я думаю, что все меняется.
F# — первый основной язык, поддерживающий эту функцию.
Существует также спецификация Java для модулей по адресу http://jcp.org/en/jsr/detail?id=275 и вы уже можете использовать его здесь http://jscience.org/
У Nemerle есть кое-что намного лучше, чем F#!
Вы должны проверить это: http://rsdn.ru/forum/src/1823225.flat.aspx#1823225 .
Это действительно здорово.А скачать можно здесь: http://rsdn.ru/File/27948/Oyster.Units.0.06.zip
Некоторые примеры:
def m3 = 1 g;
def m4 = Si.Mass(m1);
WriteLine($"Mass in SI: $m4, in CGS: $m3");
def x1 = Si.Area(1 cm * 10 m);
WriteLine($"Area of 1 cm * 10 m = $x1 m");
ну, я сделал библиотеку QuantitySystem специально для модулей на C#, однако она не проверяет время компиляции
но я постарался заставить его работать так, как хотел
также он поддерживает расширение, поэтому вы можете определить свои уникальные юниты
http://QuantitySystem.CodePlex.com
также он может различать крутящий момент и работу :) [Это было важно для меня]
Библиотечный подход находится от измерения до единиц, все, что я видел до сих пор подхода только подразделения.
Я почти уверен, что он есть у Ады.
Я уверен, что вы сможете сделать это с большинством динамических языков (javascript, python, Ruby) с помощью осторожно обезьянье исправление некоторых базовых классов.Однако при работе с имперскими размерами у вас могут возникнуть проблемы.