Table of Contents
ToggleБесплатные инструменты для Wolfram Language
В этой статье разберу бесплатные инструмены для работы с Wolfram Language. Надеюсь, что среди читателей найдутся интересующиеся этой темы.1
5058
Многим известен такой инструмент, как Wolfram Mathematica. Распространяется он совсем не бесплатно. Лицензия для личного использования стоит около $440 (~34 500 руб. в день написания статьи). Для коммерческого использования и для учебных заведений цена ещё выше.
Но это не самая большая проблема. Если рассматривать Wolfram Mathematica как инструмент для учёного, то всё нормально — пользователи просто приобретают ПО для своих личных целей. Когда дело доходит до применения Wolfram как языка программирования, становится намного сложнее.
Допустим я написал код и хочу его распространить. Никто не мешает мне выложить исходники на GitHub, однако тот, кто заинтересуется моим проектом должен будет иметь лицензию чтобы просто его запустить. В итоге распространение свободного ПО на Wolfram остаётся в рамках относительно узкого сообщества пользователей с очень отличающимися интересами.
Я не считаю, что эта статья должна стать какой-то прорывной и заставить людей массово переходить на Wolfram, однако, очень надеюсь, что среди читателей всё же найдутся интересующиеся.
Wolfram Engine
Wolfram Engine — бесплатная реализация языка Wolfram, которая содержит в себе полную стандартную библиотеку языка — ка Mathematica, но без пользовательского интерфейса. То есть это само ядро Wolfram, взаимодействие с которым осуществляется через интерфейс командной строки.
На мой взгляд отсутствие UI — это очень маленькая плата за то, что у пользователей появится законная и бесплатная версия языка. Конечно же, те кто привык к Mathematica, не смогут быстро перестроится к другому рабочему процессу, но при наличии терпения работа с Wolfram Engine может стать более эффективной, чем с Mathematica.
Теперь рассмотрим процесс установки Wolfram Engine:
- Переходим на страницу загрузки.
- Выбираем подходящую версию и скачиваем.
- После скачивания необходимо получить лицензию — для этого нужно зарегистрироваться или авторизоваться в учетной запись account.wolfram.com.
- Запускаем установщик и следуем инструкции.
- После установки в консоли и выполняем команду
wolframscript
. - При первом запуске ядра необходимо ввести учетные данные из шага 3.
После выполнения действий выше Woflram Engine готов к использованию — вместе с ним устанавливаются ещё две утилиты: Wolfram Script и Wolfram Player. Первая — утилита командной строки, которая по сути является расширением стандартного интерфейса командной строки ядра.
Вторая — программа для просмотра блокнотов Mathematica и вычисляемых документов. Редактировать и выполнять код с её помощью нельзя, но если блокнот был подготовлен должным образом, в нём будут работать все заранее выгруженные интерактивные объекты. Получается таким образом Wolfram Player можно использовать для запуска подготовленных программ.
Hello World
Теперь напишем первую программу. Откроем консоль и запустим ядро:wolframscript
После чего можно будет использовать его в режиме интерпретатора. Введём следующую команду:Print["Hello, World!"]
Первая традиционная программа заработала — ниже должна была напечататься строка: "Hello, World!"
:
В режиме интерпретатора
Другой способ — запустить код напрямую из командной строки (без запуска интерпретатора). Для этого достаточно в консоли выполнить следующее:wolframscript -code 'Print["Hello, World!"]'
Выполнения строки с кодом из консоли
И третий способ — создать скрипт (обычно это файлы с расширениями .m, .wl, .wls), добавить туда код и выполнить его в консоли:
Скрипт в текстовом редакторе
Выполнения скрипта в консоли
Wolfram Script
WolframScript for the Command Line: Execute Wolfram Language Code Anywherewolfram.com
Как было сказано выше, это расширение интерфейса командной строки. В общем случае Wolfram Script может устанавливаться совершенно отдельно и работать с любым ядром Wolrfam. То есть на локальном компьютере может и не быть Wolfram Engine или Mathematica, но при помощи Wolfram Script можно подключиться к удаленному ядру на другом компьютере или же в облако Wolfram Cloud и запускать команды там, при этом получая вывод в консоль. Например так можно выполнить код в облаке:wolframscript -cloud -code 'Print["Hello, World!"]'
Ниже мы рассмотрим еще несколько полезных опций командной строки.wolframscript -function WL wolframscript -fun WL
Данная опция позволяет указать на то, что исполняемый код является не просто скриптом, а функцией, в которую необходимо передать аргументы.wolframscript -args ARGS wolframscript -- ARGS
Здесь думаю объяснения не требуются. Это способ указать что далее идет набор аргументов командной строки.wolrfamscript -signature TYPE wolrfamscript -s TYPE
Эта опция позволяет задать типы аргументов по порядку. Список доступных типов довольно большой и сводится он в итоге ко всем заголовкам выражений Wolfram, которые язык может интерпретировать из строки или числа. Для проверки, что данный тип поддерживается можно просто посмотреть содержимое переменной$InterpreterTypes
в интерактивном режиме (не все из перечисленных типов можно будет конвертировать из строки):
Список типов, которые может интерпретировать Wolfram
Три опции, показанные выше, лучше всего использовать вместе.
Вот как это будет выглядеть в командной строке:wolframscript -fun Print -s String -args "Hello, World!"
Все опции вместе
Есть ещё одна хитрость. В функцию можно превратить целый скрипт. Необходимо просто указать это в его первой строке, тогда Wolfram Script будет воспринимать вызов скрипта именно как вызов функции с некоторыми аргументами. Это даёт возможность очень сильно упросить процесс обработки аргументов командной строки. Важно, что код скрипта должен заканчиваться точкой входа — функцией.
Создадим простой скрипт и превратим его функцию. Пусть код просто печатает числа Фибоначчи от нулевого и до указанного. Код скрипта будет выглядеть так:#!/usr/bin/env wolframscript -function -signature Integer Function[n, Fibonacci[Range[0, n]]]
Сохраним его с именем Fib.wls и вызовем этот файл из консоли:wolframscript -file Fib.wls -args 10
Результат в консоли
При этом, благодаря тому, что мы указали сигнатуру функции, то по умолчанию будет происходить проверка типов аргументов:
Wolfram Script не смог интерпретировать string1 как целое число
Выше результат напечатался в виде списка в фигурных скобках. В данном случае это представление ещё достаточно удобное, однако, часто бывает так, что результат выполнения функции — это картинка, график, таблица, трёхмерный массив и вообще что угодно. Всё вышеперечисленное неудобно просматривать в консоли. Для таких случаев существует специальная опция:wolframscript -format FORMAT wolframscript -f FORMAT
Она позволяет экспортировать результат в нужное представление. Все доступные аргументы — это, по сути, список доступных форматов для функции Export. Например, ниже те же числа Фибоначчи в виде таблицы и json:
В виде таблицы и массива json
Так же стоит перечислить те форматы, которые будут использоваться чаще всего: XML, CSV, TSV, PNG, JPEG, RawJSON, RawData, String, Buinary и так далее. Кроме того результат выполнения кода и экспорта в какой-либо формат затем очень легко записать в файл просто перенаправив выход консоли.
Известные проблемы
При работе с Wolfram Script пользователи могут встретиться со многими трудностями, которые зависят от конкретной программы, которая используется в качестве терминала. У меня например при запуске скрипта в Windows Terminal + PowerShell не выводится результат — вместо этого PowerShell решает запускать саму по себе утилиту Wolfram Script в отдельном окне, где всё и происходит.
При работе в консоли MINGW64, которая устанавливается на Windows вместе с git, нельзя запустить скрипт как исполняемый файл, так как MINGW воспринимает первую строку в скрипте как путь к платформе для запуска — то есть так, как это происходит в Linux. На Windows этого пути не существует. Хотя в Windows файлы с расширением .wls по умолчанию являются исполняемыми — более того, они легко запускаются двойным щелчком или в PoserShell или CMD.
Так же в PoserShell будут трудности при передачи нескольких строк как нескольких аргументов если там содержатся кавычки или пробелы.
А в Linux нельзя использовать сокращённый вариант передачи аргументов --
, так как он воспринимается как «системный» символ, а не как опция для Wolfram Script.
Но после некоторых экспериментов с предпочтительным типом терминала можно понять оптимальный способ работы с Wolfram Script.
Wolfram Player
Wolfram Player for Notebookswolfram.com
Его можно установить как отдельную программу или вместе с Wolfram Engine.
Как было сказано выше, это программа для просмотра интерактивных документов без возможности их редактирования. Но также в данной программе отключен пользовательский ввод данных — то есть, увы, не получится сделать документ, который будет импортировать файлы чтобы затем их обрабатывать. Основной функционал — просто открытие блокнотов (.nb) и вычисляемых документов (.cdf). Ниже скриншоты:
Блокнот созданный в Mathematica
Чтобы посмотреть как будет выглядеть вычисляемый документ – создадим его сами при помощи Wolfram Script. Пусть это будет то же, что и выше, но с возможностью интерактивно менять начальные условия. Код скрипта будет вот такой:CDFDeploy["SIR.cdf", Manipulate[ sol = {S, II, R, T} /. NDSolve[Join[ {S'[t]==-a*S[t]*II[t], II'[t]==a*S[t]*II[t]-b*II[t], R'[t]==b*II[t], T[t]==S[t]+II[t]+R[t]}, {T[0] == T0, II[0] == II0, R[0] == R0}]/. {a -> 0.07, b -> 1.08}, {S, II, R, T}, {t, 0, 50}][[1]]; Plot[Evaluate[Through[sol[t]]], {t, 0, 50}, PlotTheme->"Scientific",PlotLegends->{"S(t)", "I(t)", "R(t)", "T(t)"}, GridLines->Automatic, PlotStyle->Thick], {{T0, 50.05}, 0.0, 100.0}, {{II0, 0.1 * 50.05}, 0.0, 100.0}, {{R0, 0.0}, 0.0, 100.0} ] ]
Выполним его и получим файл SIR.cdf. Его можно будет открыть в Wolfram Player и график будет интерактивно меняться при изменении положения бегунков:
Подготовленный вычисляемый документ
При выгрузке в вычисляемый документ Wolfram сохраняет в него все необходимые определения и интерактивные объекты. Поэтому выполнять код не требуется — график с манипуляторами работает сразу после открытия.
Редакторы кода
По очевидным причинам, рассмотренного ранее недостаточно, чтобы эффективно работать с языком Wolfram. Ведь весь этот код надо ещё как-то написать. Использовать Vim или блокнот не очень удобно, хотя вполне возможно, если требуется написать что-то короткое (опытные пользователи Vim со мной не согласятся и по-своему будут правы).
Поэтому далее мы рассмотрим несколько бесплатных редакторов кода, которые имеют расширения специально для Wolfram Language. Я не буду описывать подробно процесс установки редакторов, так как он во всех случаях практически одинаков, но указать какие расширения необходимо поставить стоит.
Visual Studio Code
Visual Studio Code – Code Editing. Redefinedcode.visualstudio.com
Скачиваем установочный файл со страницы загрузки и устанавливаем по инструкции. После установки необходимо перейти в менеджер расширений и в строке поиска ввести Wolfram:
Лично я использую официальное расширение, которое разработали в Wolfram Research. Однако можно попробовать и некоторые другие — их функционал примерно одинаковый.
Теперь посмотрим как же выглядит код на Wolfram в этом редакторе:
Пример кода — пакет для создания ботов в Telegram
Очень удобно то, что в VS Code и других текстовых редакторах легко запустить консоль, в которой можно проверять работоспособность кода. Выглядеть это будет вот так:
Тестирование функции в терминале редактора
На этом мы перейдём к следующему редактору кода, но к Visual Studio Code еще вернемся ниже.
GitHub Atom
Sunsetting Atom – The GitHub Blogatom.io
Установка данного редактора ещё проще и быстрее. Необходимо просто скачать установочный файл и запустить — редактор установится автоматически в папку пользователя и сразу же запустится.
После запуска, как и в предыдущем случае, переходим в менеджер расширений и ищем расширения по ключевому слову Mathematica (или Wolfram, но тогда строка поиска и расширение, которое я выбрал, не помещаются на одной странице). Я использую расширение от разработчика Fitzse:
Менеджер расширений Atom — в него легко перейти из Welcome Guide сразу после запуска
Полезная функция расширения для Atom: в нём по умолчанию работает автодополнение с пометкой типа имени (функция, переменная или встроенное имя) и для системных функций, и для всех имён, используемых в текущем файле:
Пример авто-дополнения – в списке предложения не зависимо от регистра
Sublime Text
Sublime Text – Text Editing, Done Rightsublimetext.com
Ещё один популярный редактор кода. В отличии от рассмотренных выше, он не был написан на Electron, поэтому в среднем, по моим ощущениям, работает чуть-чуть быстрее: быстрее открывает большие файлы, нет тормозов при вызове авто-дополнения и так далее.
Стандартная установка: необходимо просто скачать инсталлятор и следовать инструкциям. После этого перейти в менеджер расширений. Сделать это можно при помощи сочетания клавиш Ctrl + Shift + P или в основном меню Preferences > Package Control:
Меню Sublime Text для перехода в менеджер расширений
После чего в поле ввода необходимо написать Install Package или выбрать этот пункт:
Доступные действия менеджера
Далее в открывшемся поле поиска необходимо ввести как обычно ключевое слово Wolfram:
Поиск нужного расширения
После установки, как это было выше для файлов с кодом на Wolfram, станет доступна подсветка синтаксиса и автодополнение для системных имён и имён, используемых в текущем документе:
Пример авто-дополнения и подсветки кода- в списке предложений указаны типы имен
Jupyter Notebook
Project Jupyter | Homejupyter.org
Free Download | Anacondaanaconda.com
GitHub – WolframResearch/WolframLanguageForJupyter: Wolfram Language kernel for Jupyter notebooksgithub.com
С помощью бесплатной среды исполнения и текстовых редакторов можно построить свой рабочий процесс в таком виде: пользователь сначала пишет скрипт или пакет, затем открывает консоль, запускает интерпретатор и уже там проверяет его работу.
Такой способ удобен, если необходимо только один раз запустить исполняемый скрипт с аргументами, чтобы он выполнял свою работу в фоне. Но работа в консоли становится не так удобна, если вам необходимо в ручном режиме проверить работу множества функций с множеством параметров и часто их комбинировать.
Блокноты Mathematica с этим справляются просто отлично — в них легко писать код и проверять результат выполнения. Есть ли альтернативы? Конечно — использовать блокноты Jupyter. Обзор Jupyter Notebook самого по себе выходит за рамки этой статьи, однако основные шаги по установке мы всё же рассмотрим.
Для начала нам потребуется сама среда Jupyter. Если вы используете Linux, то ничего объяснять не надо — подробная инструкция есть по первой ссылке под заголовком. Установка Jupyter выполняется при помощи утилиты apt.
Если вы используете Windows и не знакомы с Python и Jupyter, лучший вариант — это установить пакет Anaconda по второй ссылке. Необходимо просто следовать инструкциям. При установке очень важно отметить пункт, в котором предлагается добавить пути к исполняемым файлам в системную переменную PATH. Вместе с Anaconda установится не только Python, но и автоматически установится среда Jupyter Notebook (и многое другое). Вот так будет выглядеть окно приветствия Anaconda:
Стартовое окно Anaconda — из него можно запустить нужную утилиту
Из всего многообразия на скриншоте выше в дальнейшем нам понадобится Jupyter Notebook. В теории можно было бы использовать и JupyterLab, но он, увы, не работает с ядром Wolfram.
Следующий шаг — добавление ядра Wolfram в Jupyter. Для этого, в первую очередь, необходимо скачать проект WolframLanguageForJupyter от разработчика Wolfram Research — третья ссылка под заголовком. После того как проект будет скачан на локальный компьютер, необходимо открыть терминал в корневой папке и выполнить следующее (предполагается что Wolfram Engine и Wolfram Script установлены):wolframscript -file configure-jupyter.wls add
Данная команда автоматически создаст в конфигурации ядер Jupyter новое ядро для языка Wolfram. Чтобы попробовать его, снова откроем навигатор и запустим Jupyter Notebook нажатием кнопки Launch, откроется браузер по умолчанию и обзор директории пользователя:
Обзор домашней директории пользователя в Jupyter
Перейдём в любую доступную папку и нажмем кнопку «Новый» (я искренне прошу прощения у всех читателей за то, что им приходится видеть русифицированный интерфейс Jupyter). В выпадающем списке выберем ядро Wolfram Language. Далее откроется новый блокнот. Выглядеть он будет примерно так:
Я решил не обращать внимания на проблемы с локализацией и любой ценой дописать статью
Готово. Теперь в ячейках можно писать код на язык Wolfram и выполнять его прямо в блокноте. Конечно же, конкретно для языка Wolfram пока что пользовательский интерфейс и возможности среды далеки от того, что есть в Mathematica (да даже далеки от того что есть в этом же Jupyter для Python).
Подсветки кода и автодополнения нет, а результаты исполнения команд могут быть только двух типов: текст и картинка. В картинку конвертируется абсолютно всё, что не является текстом. Это не очень большое разнообразие, но всё же лучше того, что мы видели в консоли. Ниже несколько примеров:
Решение уравнения и странный аттрактор системы Лоренца
К сожалению, манипуляторы, интерактивные объекты, таблицы, графики и многое другое не будет здесь работать. Также нельзя будет изменять графики непосредственно в ячейке вывода при помощи встроенных в UI Mathematica-инструментов.
И одна из интересных фич Mathematica — возможность просто перетаскиванием превратить результат выполнения в код — тоже не доступна. Но сама по себе возможность работать с ячейками и сохранять свою работу в виде блокнота — это уже прекрасно.
nteract
nteract: write your next code-driven story.nteract.io
Будем считать, что мы уже установили Jupyter, Wolfram Engine и они работают вместе. Тогда можно воспользоваться альтернативной средой для работы с блокнотами .ipynb — nteract.
Скачиваем по ссылке под заголовком и выполняем стандартную установку. После того как NTeract установится, просто запустим его и создадим новый пустой блокнот. Если ядро Wolfram было ранее добавлено правильно,яя то оно автоматически появится и в nteract:
Меню выбора ядра для создания нового блокнота
Здесь будет доступно то же, что и в Jupyter Notebook:
Площадь шарнирного многоугольника
Из плюсов nterat можно выделить то, что в нём по умолчанию больше настроек. Также очень удобно то, что данную программу можно использовать в качестве программы по умолчанию для открытия файлов с расширением .ipynb. И в моём случае более приятный пользовательский интерфейс.
Visual Studio Code + Jupyter
Вот мы и вернулись к редактору VS Code. Как я заметил выше, ни в Jupyter, ни в nteract нет подсветки кода. Однако в редакторе VS Code есть расширение, которое позволяет открывать, редактировать и выполнять код в блокнотах .ipynb. Конечно же, в этом случае, если установлено расширение для языка Wolfram, оно будет так же работать и в ячейках блокнота. Разработчик расширения — Miscrosoft, оно очень популярно и проблем с его установкой возникнуть не должно. Вот оно в менеджере расширений VS Code:
Расширение для VS Code
После установки расширения с его помощью можно будет открывать уже существующие блокноты и создавать новые. Чтобы создать новый блокнот, необходимо использовать сочетание клавиш Ctrl + Shift + P, открыть меню команд и выбрать создание нового блокнота (первая строка на скриншоте):
Команда для создания нового блокнота
После этого откроется новый блокнот, в котором точно так же можно выполнять код на языке Wolfram. Предварительно нужно выбрать ядро:
Ячейки теперь с подсветкой кода, но результат так же текст и картинки
Если таким образом использовать VS Code, то разработка на языке Wolfram становится ещё проще. Ведь в VS Code тогда можно одновременно редактировать и пакеты с исходным кодом и сразу же проверять их работу в интерактивных блокнотах:
Пример кода пакета и его применения в одном окне редактора
Atom + Hydrogen + Jupyter
Примерно то же самое можно проделать и для редактора Atom. Устанавливаем расширение Hydrogen от разработчика nteract:
Менеджер пакетов Atom
Когда расширение установлено, его необходимо настроить. Для этого нужно открыть настройки (кнопка settings на скриншоте выше) и добавить сопоставление языков "wolfram language": "Mathematica"
вот так:
После этого выполнение кода станет доступно непосредственно в файлах с исходным кодом на Wolfram — то есть в скриптах и пакетах. Чтобы выполнить код, нужно выделить строку целиком с кодом (или несколько) и нажать сочетание клавиш Shift + Enter. Вот как это выглядит:
Выполнение кода прямо в файле .wls
Eclipse + Wolfram Workbench
Eclipse Packages | The Eclipse Foundation – home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects…eclipse.org
Wolfram Workbench: Eclipse-based IDE for the Wolfram Languagewolfram.com
До сих пор мы рассматривали либо текстовые редакторы, либо интерактивные среды. В последней части обзора речь пойдёт о среде разработки Eclipse. Она очень популярна и не нуждается в дополнительном представлении.
Для установки необходимо просто скачать подходящий архив (например Eclipse IDE for Java Developers) и распаковать его в любую доступную директорию. Затем запустить исполняемый файл eclipse.exe. Перед запуском убедитесь, что у вас установлена Java и путь к бинарным файлам добавлен в системную переменную PATH.
Следующим шагом необходимо установить расширение Wolfram Workbench. Открываем меню и выбираем пункт Help > Install New Software.
Окно приветствия IDE
После этого откроется окно, в котором необходимо добавить нажатием кнопки Add новое хранилище, откуда можно установить расширение. В поле ввода можно ввести любое имя и адрес хранилища http://workbench.wolfram.com/update.
Добавление хранилища с расширением
Далее необходимо просто следовать инструкциям по установки, и в конце расширение Wolfram Workbench будет готово к работе. Его можно добавить на основную панель инструментов Eclipse кнопкой в правом верхнем углу:
Добавление «перспективы» для разработки на Wolfram
Последнее, что нужно выполнить — это указать корректные пути до исполняемых файлов. Открываем настройки и ищем пункт Wolfram. Далее указываем правильные пути в исполняемым файлам как показано на скриншоте ниже:
Изменение пути до ядра по умолчанию
Всё готово для создания нового проекта. Далее просто нажимаем выбираем пункт Create a project и выбираем необходимый тип проекта:
Меню выбора проекта на языке Woflram
Следуя инструкции, необходимо будет также ввести имя проекта и его расположение:
При создании нового проекта стоит отметить все пункты в этом окне
После выполненных выше действий Wolfram Workbench сгенерирует шаблонную структура файлов для типичного пакета на языке Wolfam (пакеты и работа с Wolfram Workbench — обширная тема, которая заслуживает отдельного внимания, поэтому мы не будет долго останавливаться на ней):
Структура типичного пакета
Вот и всё. Далее уже можно писать код. Wolfram Workbench позволяет запуска код в режиме отладки, поддерживает подсветку синтаксиса, отображает встроенную документацию, умеет запускать юнит-тесты, собирать пакетные файлы, которые затем пригодны для установки по сети или прямо из файла.
Одна из самых полезных функций — Wolfram Workbench — умеет собирать документацию для пакетов неотличимую от документации для встроенных функций. На этом мы закончим краткий обзор Wolfram Workbench.
Полезные ссылки
Wolfram Language & System Documentation Centerreference.wolfram.com
Официальная документация к языку Wolfram Language. Определённо одна из лучших документаций среди всех существующих.
Документация к Wolfram Workbench.
Mathematica Stack Exchangemathematica.stackexchange.com
Раздел посвящённый Wolfram Mathematica на всем известном сайте вопросов и ответов.
Русскоязычная мини-версия Mathematica Stack Exchange. Открытая группа, где можно задавать любые вопросы, касающиеся языка Wolfram, и получать оперативные ответы. В том числе на вопросы стараюсь отвечать я. Если у вас возникнет какой-то — смело можете написать его на стене этой группы. Кроме вопросов-ответов на стене публикуются интересные материалы, касающиеся языка Wolfram.
An Elementary Introduction to the Wolfram Language by Stephen Wolframwolfram.com
Электронная книга — введение в язык от CEO компании Wolfram Research.
Wolfram Language Tutorial: Fast Introduction for Programmerswolfram.com
Ещё одна короткая методичка.
Книга одного из сотрудников компании Wolfram Research, в которой очень хорошо раскрывается сама концепция Wolrfam как языка программирования.
Wolfram Cloud
Выше я упоминал об облаке Wolfram, однако в этой статье мы не будем останавливаться на нём. Всё же здесь мне хотелось сделать обзор инструментов, которыми можно пользоваться на локальном компьютере. Обзор возможностей Wolfram Cloud — это отличная тема для отдельной статьи.
Заключение
В заключении хочу поблагодарить всех, кто дочитал до этого пункта. Я очень надеюсь что кто-то из читателей заинтересуется языком Wolfram и благодаря моему труду сможет выбрать для себя правильный инструмент для работы с ним.
В первую очередь мне хотелось показать читателям, что у интересующихся языком, кроме Mathematica, есть ещё достаточно широкий выбор средств. Если же у читателей возникнут вопросы и предложения, обязательно напишите о них в комментариях или свяжитесь со мной любым другим способом — я буду рад ответить на них.