Серия «Изучаем Wolfram Language»

0

Изучаем Wolfram Language - 4. Синтаксис

Серия Изучаем Wolfram Language

В предыдущей статье мы рассмотрели интерфейс Wolfram Mathematica. В этой мы наконец-то приступим к изучению самого языка. Начнем с основного синтаксиса. Под синтаксисом я буду подразумевать только допустимые конструкции языка, но не сами функции.

По сравнению со многими популярными языками программирования, дизайн Wolfram Language довольно необычен. Современные популярные языки, например, Python, C# или JavaScript имеют синтаксис, состоящий из ключевых слов и определений в строгом порядке. Например, в Python для создания функции я должен написать вот такой код:

def my_func(x, y):

  return x + y

В качестве элементов самого синтаксиса здесь выступают ключевые слова def и return, специальные знаки разделяющие или группирующие код "()", ", " и ":". А так же оператор сложения и свои собственные имена - их я могу придумать любые (только если они не заняты ключевыми словами). Я всего лишь использовал одну из многих существующих конструкций в Python, а элементов синтаксиса получилось не так уж и мало. Причем считается, что относительно других языков программирования, Python имеет довольно лаконичный синтаксис.

А теперь рассмотрим основные синтаксические конструкции WL.

Комментарии

Они пишутся в колючих скобочках (**) и могут быть в любом месте кода и занимать больше одной строки:

1 + 1 (* слева 2 *) + 3 + 4 (* еще комментарий *)

Создание переменной:

x = 1

Создать несколько переменных, как это работает в Python, нельзя:

x, y, z = 1, 2, 3

Но можно присвоить значения списку переменных:

{x, y, z} = {1, 2, 3}

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

x = 1

x = "string"

Очистка значения переменной

Есть несколько способов:

x =.

Или

Clear[x]

Или

ClearAll[x]

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

Арифметика

Поддерживаются все типичные арифметические операции:

  • Сложение

1 + 1 (* => 2 *)

  • Вычитание

1 - 2 (* => -1 *)

  • Умножение

3 * 5 (* => 15 *)

  • Деление

9 / 3 (* => 3 *)

  • Возведение в степень

3^2 (* => 9 *)

Сравнение

Сравнивать можно все что угодно. Например числа:

1 == 2 (* => False *)

Строки:

"string1" == "String1" (* => False *)

Списки:

{1, 2, 3} == {1, 2, 3} (* => True *)

Числа разных типов:

1.0 == 1 (* => True *)

На последнем примере остановимся подробнее. Мы сравнили целое и действительное число и вернулось True. Что нужно сделать чтобы убедиться, что типы не совпадают? Сравнить при помощи точного сравнения:

1.0 === 1 (* => False *)

Отличие точного сравнения от обычного еще в том, что при обычном сравнении, если WL не знает как сравнить два выражения - то возвращается ввод:

x+y == a+b (* => x+y == a+b *)

Точное сравнение всегда гарантирует результат True или False.

x+y === a+b (* => False *)

И еще несколько операций сравнения:

1 < 2 == True (*меньше*)

2 <= 2 == True (*меньше или равно*)

3 > 2 == True (*больше*)

3 >= 3 == True (*больше или равно*)

4 != 5 == True (*неравно*)

a != b == a != b (*неравно возвращает ввод если выражения несравнимы*)

a =!= b == False (*строгое неравно*)

Логические операции

Логическое "и" при помощи &&:

x = 5

x < 6 && x > 1 == True

Логическое "или" при помощи ||:

x = 10

x > 11 || x <= 10 == True

Логическое отрицание при помощи "!":

x = 15

!(x < 5 || x > 20) == True

Создание функций:

Самая важная часть синтаксиса - это создание собственных функций:

myFunc[x_, y_] := x + y

Обратите внимание, что для функции используется знак ":=" - это отложенное присваивание. Оно означает, что код справа не выполняется во время создания определения, но выполняется во время вызова функции.

Естественно определение функции можно очистить:

ClearAll[myFunc]

Но в WL функции можно очень легко перегружать на различных типах аргументов. То есть я могу создать дополнительное определение:

myFunc[x_] := myFunc[x, 1]

И очистить только одно из определений тоже можно:

myFunc[x_] =.

Clear или ClearAll такой способ не поддерживают, а очищают все определения.

На этом на сегодня все, в следующей части мы рассмотрим основные структуры данных и способы работы с ними, всем спасибо за внимание!

Показать полностью

Изучаем Wolfram Language - 3. Интерфейс Mathematica

Серия Изучаем Wolfram Language

После того как вы запустите Mathematica (WM), вам отобразится пустой блокнот, который похож на обычный блокнот в Windows (notepad.exe). В предыдущих версиях интерфейс этого блокнота был еще более минималистичным и не содержал дополнительных кнопок под основным меню. Приступим к его изучению!

Основное меню

Меню File

Меню File

Собственно как и в любом другом приложении рабочего стола у нас есть список пунктов меню с выпадающими списками. Они все довольно стандартны и в основном не требуют разъяснений. Но я отмечу несколько важных пунктов, которые в среднем используются чаще всего:

  • File > New > (Notebook, Presenter Notebook, Package/Script > (Wolfram Language Package))

Создает новый файл - блокнот, презентацию, пакет или скрипт

  • File > Save

Сохраняет текущий файл

  • Edit > Preferences

Открывает настройки

  • Format > ..

Меню посвящённое форматированию стилей документа, ячеек и текста

  • Evaluation > (Evaluate Notebook, Evaluate Initialization Cells, Quit Kernel)

Выполняет весь код блокнота, только ячейки инициализации, останавливает ядро

Дополнительное меню

На нем можно не останавливаться подробно. Единственное, что важно знать - это то, что в большинстве случаев кнопки дополнительного меню дублируют те команды основного меню, которые статистически чаще всего используются: форматирование, выполнение кода и вставка объектов в документ.

Ячейки

То, что мы рассмотрели выше - относится к интерфейсу приложения рабочего стола. Эта часть интерфейса может различаться в разных версиях или на разных платформах. Например, в Wolfram Cloud основное меню выглядит по другому. Но самой важной частью UI в Mathematica являются ячейки. Ячейка - это основной блок, из которого состоят документы Wolfram Mathematica. Те, кто знаком с такими приложениями как Jupyter или Observablehq хорошо представляют что такое ячейки. Кроме того, пока я пишу этот текст - я также пользуюсь похожими блоками в редакторе Pikabu.

Если в пустом документе я нажму на кнопку "+", то появится выпадающее меню, в котором приложение предложит мне выбрать тип создаваемой ячейки.

Выпадающее меню с выбором типа новой ячейки

Выпадающее меню с выбором типа новой ячейки

Я выберу первый пункт "Wolrfam Language Input". Тогда создастся ячейка с типом по умолчанию:

Курсор в новой ячейке

Курсор в новой ячейке

Я создал ячейку. Справа ячейка отделена квадратной скобочкой. На скриншоте видно, что слева в данный момент располагается курсор. Теперь можно ввести любой текст:

1+1

1+1

Так как я создал input-ячейку, то она является исполняемой, т.е. Mathematica предполагает, что в таких ячейках располагается код, который можно выполнить. Для этого достаточно нажать сочетание клавиш SHIFT + ENTER.

Результат выполнения SHIFT + ENTER

Результат выполнения SHIFT + ENTER

Что мы видим в интерфейсе:

  1. input - код переданный на вход

  2. ouput - результат выполнения кода, т.е. вывод

  3. номер в истории ввода

  4. номера в истории вывода

Мы создали ячейку ввода и нажали SHIFT + ENTER. Но что произошло далее? Приложение считало из ячейки код, т.е. 1 + 1. Отправило его в интерпретатор WL. Интерпретатор вычислил этот код и вернул результат (2) в интерфейс. Интерфейс получил результат, напечатал новую ячейку с типом output и вставил в нее результат выполнения. Т.е. вывод - это тоже такая же ячейка, которая создается после выполнения ячейки с кодом.

Есть еще один способ создания ячейки ввода. Нужно кликнуть мышью в любое пустое пространство - после всех ячеек или между двумя существующими ячейками и начать набирать любой текст. Тогда точно так же создается ячейка с типом input.

Какие еще есть типы ячеек? Во-первых, они подразделяются на текстовые и исполняемые. Всего существует два типа исполняемых ячеек - input и code. Текстовых ячеек намного больше. Все типы доступные в текущем документе можно найти в выпадающем меню:

При выборе любого типа в документ в текущее положение курсора вставляется пустая ячейка. Типов довольно много, но есть несколько самых популярных. Они вставляются при помощи сочетания клавиш ALT + 1, 2, ..9:

  • ALT + 1 - заголовок

  • ALT + 2 - подзаголовок

  • ALT + 3 - раздел

  • ALT + 4 - секция

  • ALT + 5 - подсекция

  • ALT + 6 - подсекция второго уровня

  • ALT + 7 - текст

  • ALT + 8 - код

  • ALT + 9 - инпут

Как выглядят ячейки разного типа в документе

Как выглядят ячейки разного типа в документе

Первые семь ячеек на скриншоте выше текстовые, т.е. в них можно создавать форматированный текст. 8 и 9 ячейки интерпретируются как код. Разница между ними в стиле, а так же в том, что ячейки с типом code (ALT + 8) интерпретируются как ячейки инициализации.

Любую ячейку можно выделить и вызвать контекстное меню. Для этого нужно кликнуть по скобочке справа правой кнопкой мыши:

В контекстном меню можно изменить форматирование, сменить тип, выполнить, удалить и т.д.

Еще один важный момент. На скриншотам выше видно, что ячейки сгруппированы. Если ячейка имеет тип "заголовок", все для остальных типов она будет "главной" в группе. Группу ячеек можно выполнить целиком или удалить целиком. А так же вырезать, копировать и другие действия. Иерархия чем-то похожа на теги h1/h2/h3/.. в HTML.

Собственно, на этом на сегодня все. Мы коротко рассмотрели основное меню и познакомились с ячейками и их типами. Но это далеко не все. В дальнейшем мы постепенно узнаем и другие особенности UI. Но пока что нужно знать самое важное:

  1. Mathmetica - это "подсмотрщик документов" со своим специфичным интерфейсом

  2. Все документы независимо от подсмотрщика состоят из ячеек и только из них. Ячейки могут группироваться и иметь различные типы.

  3. Есть два основных вида ячеек - исполняемые и текстовые

Показать полностью 8

Изучаем Wolfram Language - 2. Первая программа

Серия Изучаем Wolfram Language

После того как среда исполнения установлена (либо пройдена регистрация в Wolfram Cloud) можно приступить к написанию кода. Если вы установили Wolfram Engine при помощи пакетного менеджера и активировали его, то необходимо выполнить в командной строке команду:

wolfamscript

После чего запустится сессия ядра Wolfram Language. Эта сессия работает в режиме REPL. Так же как cmd.exe, PowerShell или Bash. Т.е. мы вводим команду, а ядро выполняет ее и печатает результат. После запуска интерпретатора можно выполнить какой-то простой код. По традиции напишем:

Print["Hello, World!"]

В результате напечатается переданная строка. Ниже пример результата Windows Terminal:

После запуска утилиты wolframscript напечаталась текущая версия языка и ядра

После запуска утилиты wolframscript напечаталась текущая версия языка и ядра

Для завершения сессии и возврата в PowerShell (в моем случае) можно выполнить команду:

Exit[]

Все тоже самое в интерфейсе Mathematica:

Здесь можно внимательно рассмотреть интерфейс

Здесь можно внимательно рассмотреть интерфейс

И в Wolfram Cloud:

Если что это браузер Vivaldi

Если что это браузер Vivaldi

В принципе первая традиционная для каждого языка программирования программа готова. В следующей части мы подробнее познакомимся с интерфейсом Mathematica.

Всем спасибо за внимание!

Показать полностью 3

Изучаем Wolfram Language - 1. Установка

Серия Изучаем Wolfram Language

В этой серии постов мы будем изучать такой язык программирования как Wolfram Language (WL). Но прежде чем начать, установить среду исполнения. На данный момент существует несколько различных вариантов работы с языком.

Это приложение для рабочего стола. Лучший вариант для разработки на WL, но с одним очень большим недостатком - она стоит денег, а учитывая курс доллара - она стоит достаточно приличных денег. Но выход есть - найти на торрентах кейген для Wolfram Mathematica и следовать инструкции по активации. Получить актуальную версию установщика пробной версии приложения можно на официальном сайте компании разработчика - Wolfram Research Inc. Затем эту версию можно либо купить, либо использовать кейген, либо переактивировать триал с помощью новой учетной записи.

Имеет бесплатный тариф - не требует установки и просто работает в браузере. Нужно просто пройти интуитивно понятный процесс регистрации с почтой, но без смс. Лучший вариант для начинающих. Облачная версия умеет почти все тоже самое, что и десктопная за исключением тех функций, которые связаны с железом и операционной системой. Просто потому что код исполняется на серверах компании Wolfram Research.

Бесплатная (но с ограниченной лицензией) версия ядра Wolfram Language. Из плюсов - она реально бесплатная. Из минусов - запрещено использовать в коммерческих целях и запускать больше определенного количества экземпляров. Требует привязку в электронной почте. Соответственно при необходимости установить на несколько компьютеров - можно завести несколько электронных почт и привязать лицензию к ним. В чем отличие от предыдущих вариантов: устанавливает ядро локально, но без пользовательского интерфейса. Т.е. это утилита командной строки, которая запускается из консоли. Огромный плюс в том, что можно установить при помощи пакетного менеджера:

brew cask install wolfram-engine

winget install WolframEngine

Или запустить как docker-контейнер

docker pull wolframresearch/wolframengine

Независимо от того, какой вариант вы выбрали - везде будет один и тот же язык программирования и в браузере, и в Mathemetica, и в терминале.

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

Всем спасибо за внимание!

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества