понедельник, 1 января 2018 г.

Lua. Больше чем калькулятор

В одном из предыдущих постов я описал свой опыт использования Lua в качестве системы для расчётов. Идея заключалась в том, чтобы перед началом работы подгружать в стандартный интерпретатор необходимые математические функции. Со временем функционал вырос, усложнилась справочная система, появилась возможность локализации, тестирование... В итоге, calc.lua превратился в LuaCalculus. Здесь я хотел бы описать основные возможности программы на данный момент.


При запуске программы у пользователя есть доступ к основным математическим функциям, типа sin(), ath() или rand(). Чтобы подключить дополнительный функционал, нужно загрузить соответствующие модули. По сути, это обычные модули Lua и они могут использваться независимо от основной программы, т.о. LuaCalculus может рассматриваться также как библиотека математических функций, имплементированных в Lua

Для подключения модулей рекомендуется использовать функцию import(), т.к. она не только вызывает стандартный метод require(), но также подгружает справочную информацию и позволяет подключить несколько модулей в одной команде.
В этом примере загружаются модули 'polynom' и 'matrix'. Функция help(import) позволяет отобразить информацию по доступным модулям. 

Вот несколько примеров по работе с матрицами. Новый объект создаётся путём построчного перечисления элементов. Большинство стандартных операций с матрицами доступны для использования.
Следует иметь ввиду, что по-умолчанию матрица является разряжённой, т.е. содержит только ненулевые элементы, по-этому вызов a[i][j] может привести к ошибке. Вместо него лучше использовать функции get и set.
Вызыовы a(i,j) и a:get(i,j) равнозначны. В методе set новое значение устанавливается не третьим аргументом, а в отдельных скобках.

Для полиномов также написан отдельный модуль, который позволяет выполнять многие распространённые операции.




На данный момент LuaCalculus не имеет собственных средств для построения графиков, но программа предоставляет интерфейс для доступа к Gnuplot
В данном случае команда import 'all' приводит к загрузке всех имеющихся модулей.

Вот ещё несколько примеров. 
Операции с целыми произвольного размера и рациональными числами.
Численное решение задач (поиск корня, дифференцирование функции, ОДУ).
Работа с единицами измерения.


Язык программы по-умолчанию - ломаный английский. Однако программа поддерживает возможность локализации. Доступные языковые файлы хранятся в папке locale. Чтобы доключить какой-либо из них, нужно в основном файле calc.lua раскомментировать строку 
  
   LOCALISATION_FILE = "ru.lng"

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

  
   lua calc.lua -lang fr


чтобы в папке locale появился файл fr.lng, содержащий текущие функции с описаниями в закомментированном виде. Если перевести описания интересующих функций и раскомментировать их, а также добавить имя файла в calc.lua, то при следующем запуске программа будет содержать текст на желаемом языке. 

Локализация отлично работает в Linux, однако в Windows может возникнуть проблема с кодировкой, т.к. терминал поддерживает cp866, а файлы написаны в UTF-8. Что с этим делать, я пока не придумал(

В перечисленных примерах описаны не все возможности (и не все модули) программы. Чтобы получить список функций или описание, используйте help(). Функция example('модуль') отобразит примеры вызовов для каждого модуля. 

Последняя, на момент написания, версия программы: LuaCalculus
Ссылка на прокет: github:lc
Описание (на английском): lc:wiki

Комментариев нет:

Отправить комментарий