Язык Wolfram ( / ˈ w ʊ l f r əm / WUUL -frəm ) — это собственный [7] общий многопарадигмальный язык программирования высокого уровня [8], разработанный Wolfram Research . Он делает упор на символьные вычисления , функциональное программирование и программирование на основе правил [9] и может использовать произвольные структуры и данные. [9] Это язык программирования математической программы символьных вычислений Mathematica . [10]
Язык Wolfram Language был частью первоначальной версии Mathematica в 1988 году. [11]
Символические аспекты движка делают его системой компьютерной алгебры. Язык может выполнять интегрирование, дифференцирование, манипуляции с матрицами и решать дифференциальные уравнения, используя набор правил. Кроме того, в первоначальной версии была представлена модель ноутбука и возможность встраивания звука и изображения согласно патенту Теодора Грея . [12]
Wolfram также добавил функции для более сложных задач, таких как 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 фактически представляют собой случай простых шаблонов замены:
F [ х_ ] := х ^ 0
Это :=
«оператор SetDelayed», поэтому поиск x не осуществляется сразу. x_
является синтаксическим сахаром для Pattern[x, Blank[]]
, т.е. «пробелом» для любого значения, заменяющего x в остальной части оценки.
Итерация пузырьковой сортировки выражается как:
sortRule := { x___ , y_ , z_ , k___ } /; y > z -> { x , z , y , k } (* Правило[Условие[Список[ПоследовательностьШаблон[x, BlankNullSequence[]], Шаблон[y, Пустой[]], Шаблон[z, Пустой[]], PatternSequence [k, BlankNullSequence[]]], Greater[y, z]], List[x, z, y, k]] *)
Оператором /;
является «условие», поэтому правило применяется только тогда, когда y>z
. Три подчеркивания — это синтаксис для BlankNullSequence[]
последовательности, которая может иметь значение null.
Оператор 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 выпустила анализатор языка C++ под лицензией MIT с открытым исходным кодом . [22] Справочник находится в открытом доступе . [23]
За более чем три десятилетия существования языка Wolfram также был разработан ряд сторонних реализаций с открытым исходным кодом . MockMMA Ричарда Фейтмана 1991 года имеет историческое значение как потому, что является самой ранней повторной реализацией, так и потому, что получил разрешение от Wolfram о прекращении противоправных действий. Современные версии, которые все еще поддерживаются по состоянию на апрель 2020 года, [update]включают Symja на Java , expreduce на Golang и Mathics на основе SymPy . [24] Эти реализации сосредоточены на базовом языке и системе компьютерной алгебры , которую он подразумевает, а не на функциях онлайн-базы знаний Wolfram.
В 2019 году [25] Wolfram Research выпустила бесплатную программу Wolfram Engine, которая будет использоваться в качестве библиотеки программирования в некоммерческом программном обеспечении. [26]
Язык был официально назван в июне 2013 года и использовался в качестве серверной части Mathematica и других технологий Wolfram более 30 лет. [27] [28]