]]> ]]>

Wolfram Mathematica

Реализация языка программирования Wolfram Mathematica

Официальная (и единственная) реализация Mathematica, разрабатываемая Wolfram Research. Первая версия была выпущена в 1988 году. Реализация проприетарная, стоимость лицензии зависит от цели использования.

Система написана на Mathematica и частично на C (ради ускорения определенных вычислений). Система состоит из двух основных частей — ядро (интерпретирует выражения и производит вычисления) и фронт-енд. Стандартный фронт-енд — интерфейс пользователя в виде Notebook, позволяющий создавать программы (в том числе и в свободной форме, которая затем интерпретируется в код), отлаживать их, представлять их в отформатированном виде, вставлять компоненты пользовательского интерфейса, изображения и т.д. Существуют также альтернативные фронт-енды — Wolfram Workbench (среда разработки, основанная на Eclipse) и командная строка.

Примеры:

Квадратное уравнение:

Пример для версий Wolfram Mathematica 7.0.1.0, Wolfram Mathematica 8.0.4

После ввода коэффициентов определяем переменную y — квадратное уравнение с заданными коэффициентами. Так как x не определено, в уравнении оно останется обычной переменной (например, Print[y] выведет запись полученного уравнений c + b x + a x^2 с подставленными коэффициентами a, b и c). Функция Reduce вычисляет значения переменных, при котором указанное условие будет истинным. Условие в данном случае — квадратное уравнение, а переменная — x.

a = Input["Input a", 0];
b = Input["Input b", 0];
c = Input["Input c", 0];
y = a*x^2 + b*x + c;
Print[Reduce[y == 0]];

Факториал:

Пример для версий Mathics 0.4, Wolfram Mathematica 7.0.1.0, Wolfram Mathematica 8.0.4

Используется встроенная функция вычисления факториала !. Do — один из способов реализации циклов; выполняет первый аргумент для всех значений, заданных вторым аргументом, а именно: для всех i от 0 до 16 с шагом 1.

Do[Print[i, "! = ", i!] , {i, 0, 16, 1}]

Числа Фибоначчи:

Пример для версий Mathics 0.4, Wolfram Mathematica 7.0.1.0, Wolfram Mathematica 8.0.4

Print обязательно завершает вывод переносом строки, поэтому для того, чтобы вывести все числа Фибоначчи в одной строке, их нужно накопить в переменной msg и вывести ее. <> — оператор конкатенации; он работает только с явными строками, поэтому результат вызова Fibonacci нужно явно перевести в строку функцией ToString.

msg = "";
Do[msg = msg <> ToString[Fibonacci[i]] <> ", " , {i, 16} ];
Print[msg, "..."];

Hello, World!:

Пример для версий Mathics 0.4, Wolfram Mathematica 7.0.1.0, Wolfram Mathematica 8.0.4

Функция Print выводит свои аргументы в основной выходной поток. Потоки могут быть вложенными, и для удобства копирования результатов лучше пользоваться для вывода одним потоком.

Print["Hello, World!"];

Hello, World!:

Пример для версий Mathics 0.4, Wolfram Mathematica 7.0.1.0, Wolfram Mathematica 8.0.4

В этом случае создается временная строковая переменная. В конце строки нет символа “;”, и значение этой переменной выводится отдельным Out, что не всегда удобно.

"Hello, World!"

Факториал:

Пример для версий Wolfram Mathematica 8.0.4

Используется рекурсивное определение факториала. Обратите внимание на то, что при определении функции ее аргумент дополняется символом _.

Fact[n_] := If[n == 0, 1, Fact[n - 1]*n];
For[i = 0, i <= 16, i++, Print[i, "! = ", Fact[i]]];

Факториал:

Пример для версий Wolfram Mathematica 8.0.4

Символу f[x] ставится в соответствие список (List[…]) первых x натуральных чисел, генерируемый функцией Range[x], в которой головная часть List заменяется на Times при помощи функции Apply[head, expr], записанной здесь как head@@expr.

Здесь использованы две парадигмы программирования, реализованные в Wolfram: во-первых, с помощью шаблонного выражения x_ число, вписанное в квадратные скобки, подставляется в соответствующее место справа от знака отсроченного присваивания := . Во-вторых, функциональная парадигма позволила избавить код от громоздких процедурных конструкций и придти к похожей на математическую записи.

fact[x_]:=Times@@Range[x];

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам