Вопрос по – Единицы измерения уникальны для F #? [закрыто]

19

Я читал серию постов Эндрю Кеннеди наединицы измерения в F # и это имеет большой смысл во многих случаях. Есть ли другие языки с такой системой?

Изменить: Чтобы быть более понятным, я имею в виду гибкую систему единиц измерения, где вы можете определить свои собственные произвольно.

Ваш Ответ

11   ответов
2

F # - первый основной язык, который поддерживает эту функцию.

Для этого есть библиотека: «Единицы измерения для Ады»,dmitry-kazakov.de/ada/units.htm
Я не думаю, что Ada имеет эту функцию напрямую, но вы, безусловно, можете объявить типы, которые основаны на другом типе (например, целое число или число с плавающей точкой), но являются несовместимыми типами для компилятора. Таким образом, вы не можете напрямую добавлять метры и футы без преобразования одного из них.
0

Я уверен, что у Ады это есть.

Я не думаю, что Ada имеет эту функцию напрямую, но вы, безусловно, можете объявить типы, которые основаны на другом типе (например, целое число или число с плавающей точкой), но являются несовместимыми типами для компилятора. Таким образом, вы не можете напрямую добавлять метры и футы без преобразования одного из них.
Для этого есть библиотека: «Единицы измерения для Ады»,dmitry-kazakov.de/ada/units.htm
6

Nemerle имел проверенные компилятором единицы измерения в 2006 году.

http://nemerle.org

http://nemerle.org/forum.old/viewtopic.php?t=265&view=previous&sid=00f48f33fafd3d49cc6a92350b77d554

2

Существует также спецификация Java для модулей вhttp://jcp.org/en/jsr/detail?id=275 и вы уже можете использовать его здесьhttp://jscience.org/

3

Я думаю, что я видел этоКрепость поддержите это, я посмотрю, смогу ли я найти ссылку.

Я не могу найти конкретную ссылку, но в спецификации языка она упоминается в нескольких местах. В спецификации языка 1.0 также сказано, что размеры и единицы были временно исключены из спецификации (вместе с целой кучей других функций) для соответствия текущей реализации. Это работа в процессе, так что я думаю, что все в движении.

3

Я не уверен, действительно ли это имеет значение, ноRPL Система на моем калькуляторе HP-48 имеет аналогичные функции. я могу написать40_gal 5_l + и получите правильный ответ 156,416 л.

У меня нет под рукой моего руководства по моему 48, но я верю, что оно позволяет вам сделать это.
Я имел в виду систему, с помощью которой вы можете определять произвольные единицы измерения, но, тем не менее, это интересно. Cody Brocious
2

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");
1

Ну, я сделал библиотеку КоличествоSystem специально для модулей в C #, однако это не проверка времени компиляции

но я пытался заставить его работать так, как я хотел

также он поддерживает расширение, так что вы можете определить свои уникальные единицы

http://QuantitySystem.CodePlex.com

также он может различать Torque и Work :) [Это было важно для меня]

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

10

TI-89 BASIC считается? Войти54_kg * (_c^2) и это даст вам ответ в джоулях.

Кроме этого, я не могу вспомнить какие-либо языки, в которые он встроен, но любой язык с приличным ОО должен позволять легко создавать свои собственные. Что означает, что кто-то еще, вероятно, уже сделал.

Google подтверждает. Например,вот один в Python. __repr__ можно легко изменить, чтобы выбрать наиболее подходящую производную единицу и т. д.

CPAN имеет несколько модулей для Perl:Физика :: Unit, Данные :: Размеры, Класс :: Мера, Math :: Units :: PhysicalValueи несколько других, которые будут преобразовывать, но на самом деле не объединяют значения с единицами измерения.

6

С ++ имеет его в формеповышение :: единиц.

Там такжеPhysUnits-CT-Cpp11небольшая библиотека C ++ 11, C ++ 14 только для заголовков для анализа измерений во время компиляции и манипулирования и преобразования единиц / количества. Проще, чем Boost.Units, зависит только от стандартной библиотеки C ++, только для SI, интегральных степеней измерений
0

Я уверен, что вы сможете сделать это с большинством динамических языков (javascript, python, ruby) с помощьюcarefully исправление некоторых базовых классов. Хотя вы можете столкнуться с проблемами при работе с имперскими измерениями.

Похожие вопросы