Wolfram Language ( / ˈ w ʊ l f r əm / WUUL -frəm ) — это запатентованный [7] универсальный, очень высокоуровневый многопарадигменный язык программирования [8], разработанный Wolfram Research . Он делает акцент на символьных вычислениях , функциональном программировании и программировании на основе правил [9] и может использовать произвольные структуры и данные. [9] Это язык программирования программы математических символьных вычислений Mathematica . [10]
Язык Wolfram Language был частью первоначальной версии Mathematica в 1988 году. [11]
Символические аспекты движка делают его системой компьютерной алгебры. Язык может выполнять интеграцию, дифференциацию, матричные манипуляции и решать дифференциальные уравнения с использованием набора правил. Также, в первоначальной версии была представлена модель блокнота и возможность встраивать звук и изображения, согласно патенту Теодора Грея . [12]
Вольфрам также добавил функции для более сложных задач, таких как 3D-моделирование. [13]
Название для языка было окончательно принято в 2013 году, когда Wolfram Research решила сделать версию языкового движка бесплатной для пользователей Raspberry Pi , и им нужно было придумать для него название. [14] Он был включен в рекомендуемый пакет программного обеспечения, который Raspberry Pi Foundation предоставляет новичкам, что вызвало некоторые споры из-за запатентованной природы языка Wolfram . [15] Планы по переносу языка Wolfram на Intel Edison были объявлены после представления платы на выставке CES 2014, но так и не были выпущены. [16] В 2019 году была добавлена ссылка, чтобы сделать библиотеки Wolfram совместимыми с игровым движком Unity , предоставив разработчикам игр доступ к высокоуровневым функциям языка. [17] [18]
Синтаксис языка Wolfram Language в целом похож на M-выражение LISP 1960-х годов с поддержкой инфиксных операторов и вызовов функций «функциональной нотации».
Язык Wolfram записывает основные арифметические выражения с использованием инфиксных операторов .
(* Это комментарий. *)4 + 3 (* = 7 *) 1 + 2 * ( 3 + 4 ) (* = 15 *) (* Обратите внимание, что умножение можно опустить: 1 + 2 (3 + 4) *) (* Деление возвращает рациональные числа: *) 6 / 4 (* = 3/2 *)
Вызовы функций обозначаются квадратными скобками:
Син [ Пи ] (* = 0 *)(* Это функция преобразования рациональных чисел в числа с плавающей точкой: *) N [ 3 / 2 ] (* = 1,5 *)
Списки заключены в фигурные скобки:
Список нечетных чисел = { 1 , 3 , 5 } (* = {1,3,5} *)
Язык может отклоняться от парадигмы М-выражения, когда доступен альтернативный, более удобный для человека способ отображения выражения:
TeXForm
для наборных выражений и InputForm
для языкового ввода.@
и постфиксного выражения //
.'
.Форматировщик FullForm
очищает входные данные от сахара: [19]
ПолнаяФорма [ 1 + 2 ] (* = Плюс[1, 2] *)
Поддерживается каррирование .
Функции в языке Wolfram Language фактически представляют собой случай простых шаблонов для замены:
Ф [ х_ ] := х ^ 0
Это :=
оператор «SetDelayed», поэтому x не ищется немедленно. x_
— это синтаксический сахар для Pattern[x, Blank[]]
, т. е. «пробел» для любого значения, которым следует заменить x в оставшейся части вычисления.
Итерация пузырьковой сортировки выражается как:
sortRule := { x___ , y_ , z_ , k___ } /; y > z -> { x , z , y , k } (* Правило[Условие[Список[ПоследовательностьШаблона[x, ПустаяНулеваяПоследовательность[]], Шаблон[y, ПустаяНулеваяПоследовательность[]], Шаблон[z, ПустаяНулеваяПоследовательность[]], ПоследовательностьШаблона[k, ПустаяНулеваяПоследовательность[]]], Больше[y, z]], Список[x, z, y, k]] *)
Оператор /;
— «условие», поэтому правило применяется только при y>z
. Три подчеркивания — это синтаксис для BlankNullSequence[]
, для последовательности, которая может быть нулевой.
Оператор ReplaceRepeated //.
можно использовать для многократного применения этого правила до тех пор, пока не прекратятся изменения:
{ 9 , 5 , 3 , 1 , 2 , 4 } // . sortRule (* = ReplaceRepeated[{ 9, 5, 3, 1, 2, 4 }, sortRule] *) (* = {1, 2, 3, 4, 5, 9} *)
Система сопоставления шаблонов также легко порождает интеграцию и вывод на основе правил. Ниже приведены выдержки из пакета правил Rubi: [20]
(* Обратное правило *) Int [ 1 / x_ , x_Symbol ] := Log [ x ]; (* Правило степенной функции *) Int [ x_ ^ m_ . , x_Symbol ] := x ^ ( m + 1 ) / ( m + 1 ) /; FreeQ [ m , x ] && NeQ [ m , -1 ]
Официальная и справочная реализация языка Wolfram Language находится в Mathematica и связанных с ней онлайн-сервисах. Они имеют закрытый исходный код. [21] Однако Wolfram Research выпустила парсер языка под лицензией MIT с открытым исходным кодом . [22] Парсер изначально был разработан на C++ , но в 2023 году был переписан на Rust . Справочник находится в открытом доступе . [23]
За более чем тридцатилетнюю историю существования языка Wolfram было разработано несколько сторонних реализаций с открытым исходным кодом . MockMMA Ричарда Фейтмана 1991 года имеет историческое значение, как для самой ранней повторной реализации, так и для получения от Wolfram разрешения на прекращение и воздержание. Современные, которые все еще поддерживаются по состоянию на апрель 2020 года, [update]включают Symja на Java , expreduce на Golang и Mathics на основе SymPy . [24] Эти реализации сосредоточены на основном языке и системе компьютерной алгебры , которую он подразумевает, а не на функциях онлайн-"базы знаний" Wolfram.
В 2019 году [25] Wolfram Research выпустила бесплатное программное обеспечение Wolfram Engine, которое будет использоваться в качестве библиотеки программирования в некоммерческом программном обеспечении. Этот движок, предназначенный только для разработчиков, предоставляет оболочку командной строки оценщика Mathematica (с ограниченным количеством ядер) и требует регистрации и активации лицензии через Интернет. Свободно доступный проект Jupyter Notebook/Lab предоставляет протокол (ZMQ) для подключения своих блокнотов к различным языкам, он доступен как альтернатива текстовому интерфейсу CLI через Wolfram Kernel для Jupyter. [26]
Язык получил официальное название в июне 2013 года и использовался в качестве бэкэнда Mathematica и других технологий Wolfram более 30 лет. [27] [28]