Wolfram (язык программирования)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:19, 1 июня 2016.
Wolfram
Парадигма функциональный,процедурный, массивное программирование
Спроектировано Stephen Wolfram
Разработчики Wolfram Research
Первый   появившийся 2013
Печать дисциплины динамическая, сильная
Портал: www.wolfram.com/language
Под влиянием
Mathematica
Влияние
Julia

Wolfram (англ. Wolfram Language) — весьма общий мультипарадигмальный язык программирования. Разработан язык компанией Wolfram Research. Служит основным связующим языком для системы Mathematica. Его создатели заложили в него возможность реализовывать произвольные структуры и данные. Он был спроектирован как максимально универсальный язык, с акцентом на символьные вычисления, функциональное и логическое программирование.

История

Стивен Вольфрам является британским ученым, известным своими работами в области физики элементарных частиц и клеточных автоматов, информатики и математики. Он является автором книги «A New Kind of Science" и создателем приложений на основе программного обеспечения Mathematica и Wolfram Alpha, разработанного в 2009 году, представляющего собой интернет-сервис.

Основные принципы

Основные принципы языка являются:

  • Научное программирование на основе максимального знания.
  • Мета алгоритмы: максимально возможная автоматизация.
  • Согласованность: язык поддерживает единую и элегантную конструкцию.
  • Символическое представление: все (данные, формулы, графики, код, документы) представлены в виде символических выражений.
  • Модель мира: язык Вольфрам построил широкую модель мира через Wolfram Alpha.
  • Универсальный развертывания: развертывание языка на любой платформе.
  • Встроенные подключения к широкому спектру языков, услуг, программ и устройств, использующих Wolfram Cloud.
  • Интерактивность.
  • Полностью масштабируемое: позволяет масштабирование программ с программами одной линии с миллионами строк и самостоятельного использования для широкого общественного развертывания.

Примеры

Код для вычисления 2 + 2

ln[] = 2+2

Изменение семейства шрифтов:

ln[] = ImageReflect[Rasterize[Style["name",40,FontFamily->"Comic Sans MS"]],Left->Right]

Рисование диска размером 100:

ln[] =Graphics[Disk[],ImageSize->100]

Код, полностью изменяющий слово “rhinoceros”:

ln[] = StringReverse["rhinoceros"]

Примеры различных программ:

F=GF[2];PowerListQ[GF[2]]=True;
{table,CD,L}=BM[{0,F[{1}],0,F[{1}],F[{1}],0,F[{1}],0,0,F[{1}]},F];
table//TableForm
Print["C(D)=",Simplify[CD],"; L=", L];
n	s^(n+1)	\[Delta]	C(D)	2L<=n	C^*(D)	L	\[Delta]^*	\[Lambda]
	Initial loading:		1		1	0	1	1
F=GF[2,{1,1,0,0,1}];PowerListQ[GF[2,{1,1,0,0,1}]]=True;
{table,CD,L}=BM[{FieldExp[F,8],FieldExp[F,6],FieldExp[F,11],FieldExp[F,5]},F];
table//TableForm
Print["C(D)=",Simplify[CD],"; L=", L];
n	s^(n+1)	\[Delta]	C(D)	2L<=n	C^*(D)	L	\[Delta]^*	\[Lambda]
	Initial loading:		1		1	0	1	1
0	\[Alpha]^8	\[Alpha]^8	1\[Alpha]^8	+	1	1	\[Alpha]^8	1
1	\[Alpha]^8\[Alpha]^6	\[Alpha]^11	1\[Alpha]^13	-				2
2	\[Alpha]^8\[Alpha]^6\[Alpha]^11	\[Alpha]^13	1\[Alpha]^13\[Alpha]^5	+	1\[Alpha]^13	2	\[Alpha]^13	1
3	\[Alpha]^8\[Alpha]^6\[Alpha]^11\[Alpha]^5	\[Alpha]^1	1\[Alpha]^8\[Alpha]^2	-				2

Алгоритм Берлекемпа-Месси, реализованный на Wolfram

<<FiniteFields`
BM[s_,fld_]:=Module[
    {CD=fld[{1}],CDA=fld[{1}],L=0,\[Delta],\[Delta]A=fld[{1}],\[Lambda]=1,TD,table={}},

    table = Append[table,{"n","s^(n+1)","\[Delta]","C(D)","2L<=n","C^*(D)","L","\[Delta]^*","\[Lambda]"}];
    table = Append[table,{"","Initial loading:", "", "1", "","1", "0","1","1"}];

    For[n=0,n<Length[s],n++,

        sn = s[[;;n+1]];

        \[Delta] = PadRight[CoefficientList[CD,D],L+1].PadRight[Reverse[sn],L+1];

        table = Append[table,{n,StringJoin[ToString[If[FieldInd[#]==-Infinity,0,If[FieldInd[#]==0,1,Superscript[\[Alpha],FieldInd[#]]]],TraditionalForm]&amp;/@sn],ToString[If[FieldInd[\[Delta]]==-Infinity,0,If[FieldInd[\[Delta]]==0,1,Superscript[\[Alpha],FieldInd[\[Delta]]]]],TraditionalForm]}];

        If[FieldInd[\[Delta]]==-Infinity,

            \[Lambda] += 1;
            table[[n+3]] = Join[table[[n+3]],{"","","","","",\[Lambda]}],

            TD=CD;
            CD-=\[Delta]/\[Delta]A*D^\[Lambda]*CDA;

            If[2*L<=n,

                L=n+1-L;
                \[Lambda] = 1; \[Delta]A = \[Delta];
                CDA = TD;
                table[[n+3]] = Join[table[[n+3]],{StringJoin[ToString[If[FieldInd[#]==-Infinity,0,If[FieldInd[#]==0,1,Superscript[\[Alpha],FieldInd[#]]]],TraditionalForm]&amp;/@CoefficientList[CD,D]],"+",StringJoin[ToString[If[FieldInd[#]==-Infinity,0,If[FieldInd[#]==0,1,Superscript[\[Alpha],FieldInd[#]]]],TraditionalForm]&amp;/@CoefficientList[CDA,D]],L,ToString[If[FieldInd[\[Delta]A]==-Infinity,0,If[FieldInd[\[Delta]A]==0,1,Superscript[\[Alpha],FieldInd[\[Delta]A]]]],TraditionalForm],\[Lambda]}],

                \[Lambda] += 1;
                table[[n+3]] = Join[table[[n+3]], {StringJoin[ToString[If[FieldInd[#]==-Infinity,0,If[FieldInd[#]==0,1,Superscript[\[Alpha],FieldInd[#]]]],TraditionalForm]&amp;/@CoefficientList[CD,D]],"-","","","",\[Lambda]}];

            ];
        ];
    ];
    Return[{table,CD,L},Module]
];

Ссылки

  1. Документация по Wolfram Language
  2. An Elementary Введение вWolfram Language
  3. The Wolfram Programming Cloud
  4. WolframLanguage.org
  5. Список с открытым исходным кодом реализаций языка wolfram