我们所构建的是一种计算语言(这非常重要!)

Wolfie

Wolfram语言是一种什么样的东西?

我有时发现很难解释为什么Wolfram语言真的是。是的,它是一种计算机语言——一种程序设计语言。它确实——以一种独特而富有成效的方式,我可能会加上标准编程语言所做的事情。但这只是故事的一小部分。我终于意识到,人们应该把Wolfram语言看作是一种完全不同的全新的东西:人们可以称之为计算语言

那么什么是计算语言呢?它是一种用计算的方式表达事物的语言,也是一种捕捉思考事物的计算方式的语言。它不仅仅是一种告诉计算机该做什么的语言。它是一种计算机和人类都能用来表达思考问题的计算方式的语言。这是一种语言,它将一切事物的计算观点具体化。它是一种语言,让人们使用计算范式作为框架,形成和组织自己的思想。

直到最近,我才开始适当地内化拥有一种计算语言的真正含义是多么广泛——尽管,具有讽刺意味的是,我一生中的大部分时间都在致力于构建世界上唯一的大规模计算语言。

这篇文章也在:
一夜»

这有助于我思考一个历史类比。五百年前,如果人们想谈论数学思想和运算,他们基本上必须使用人类的自然语言,基本上用文字写出一切。但是数学符号的发明大约在400年前(以+、×、=等开头。)改变了这一切,并开始为表示数学思想提供一个系统的结构和框架。

结果是惊人的戏剧性。因为从根本上说,正是这种发展使现代数学思维(如代数和微积分)成为可能,并开启了我们认识世界的数学思维方式,以及由此产生的所有科学和技术。

我认为这与计算语言的情况类似。但是现在发生的是我们得到了一种系统的方式来表示和讨论计算的思想,以及思考世界的计算方式。有了标准编程语言,我们就有了一种谈论计算机底层操作的方法。但有了计算语言,我们现在有了一种将计算范式直接应用到几乎任何领域的方法:我们有了一种语言和一种符号,用于计算X,基本上适用于任何领域(从考古学到动物学,以及其他)。

有一些“数学X”领域已经存在一段时间了,其中通常的要点是根据传统的数学结构(如方程)来构建东西,然后可以“机械地”解决(至少,比如说,用)Mathematica!)但是在过去的几十年里,一个伟大的认识是,计算范式要广泛得多:更多的东西可以通过计算来表示,而不仅仅是数学。

有时,我们处理的是非常简单的抽象程序(事实上,我也这样做过花了数年探索计算宇宙的科学这样的程序)。但人们通常对与我们对世界的直接体验有关的操作和实体感兴趣。但这里的关键是——正如我们在构建Wolfram语言时所了解的那样——可以用计算的方式表示这些东西。换句话说,有一种计算语言可以用计算的术语来描述世界。

这是真正启动所有可能的“计算X”域所需要的。

什么是计算语言?

假设我们想谈谈行星。用Wolfram的语言,行星只是象征性的实体:

EntityList
& # 10005

EntityList[EntityClass[“行星”,全部]]

我们可以计算它们(这里是木星质量除以地球质量):

木星
& # 10005

实体(“地球”,“木星”)["质量"]/实体(“地球”,“地球”)(“质量”)

让我们制作一幅拼贴画,其中每颗行星的质量决定其显示的大小:

ImageCollage
& # 10005

ImageCollage[实体类["行星",所有]["质量"]->实体类["行星",所有]["图像"]]

要用计算的术语来谈论现实世界,你必须能够计算有关它的东西。就像这里,Wolfram语言正在计算火星的当前位置(就像我写这篇文章一样):

火星
& # 10005

实体(“星球”、“火星”)[EntityProperty[“星球”、“HelioCoordinates”]]

这是它制作的一个3D图表,显示了从现在开始的18个月里它的每个位置:

ListPointPlot3D
& # 10005

ListPointPlot3D[表格[实体[“行星”,“火星”][日期[实体属性[“行星”,“太阳坐标”],现在+数量[n,“月”]],{n,18}]]

让我们再做一个例子。拿一张图片,找出其中的人脸:

FacialFeatures
& # 10005

FacialFeatures [CloudGet[“https://wolfr。am / DpadWvjE”),“图像”)

作为另一个计算符合现实的例子,我们可以制作一个直方图(比如,在5岁的箱子里),显示图片中人们的估计年龄:

柱状图
& # 10005

直方图(FacialFeatures [CloudGet[“https://wolfr。am / DpadWvjE”),“时代”],{5}]

令人惊讶的是,最终的结果是可计算的。以下是分布在“视觉特征空间”中的希腊字母表中每个字母的光栅化图像:

FeatureSpacePlot
& # 10005

FeatureSpacePlot[栅格化/ @字母表[“希腊”]]

是的,它(我认为)令人印象深刻Wolfram语言能做什么.但这里更重要的是看它如何让一个人指定要做什么。因为这正是计算语言发挥作用的地方——它给我们提供了一种用计算的方式来谈论行星、人脸和视觉特征空间的方法。

当然,一旦我们用计算语言制定了一些东西,我们就处于一个位置(感谢整体知识库algorithmbaseWolfram语言)来做一个实际的计算。不用说,这是非常强大的。但同样非常强大的是,计算语言本身给了我们一种方法,用计算的方式来表达东西。

假设我们想知道罗马数字系统的效率。我们如何用计算来表述这个问题呢?我们可以考虑知道罗马数字的字符串长度,并将它们与现代整数的长度进行比较。在Wolfram语言中很容易表达这一点。这是一个罗马数字:

RomanNumeral
& # 10005

RomanNumeral [188]

这是它的字符串长度:

StringLength
& # 10005

StringLength [RomanNumeral [188]]

现在,这里是所有罗马数字长度(200以下)除以相应整数长度的图表——标注会自动显示值得注意的值:

ListLinePlot
& # 10005

ListLinePlot[Table[Callout[StringLength[RomanNumeral[n]]/IntegerLength[n], n], {n, 200}]]

对于1000以下的所有数字,做一个直方图很容易:

柱状图
& # 10005

直方图[表[StringLength[RomanNumeric[n]]/整数长度[n],{n,1000}]]

但当然,在实际使用中,有些数字比其他的更常见。那么我们如何捕捉这一点呢?这里有一个(相当幼稚的)计算方法。我们来分析一下关于算术的维基百科文章,看看它提到了哪些整数。同样,计算概念很容易在Wolfram语言中表达:在文章中找到数字的情况,然后选择那些被解释为整数的情况:

选择
& # 10005

Select[IntegerQ][TextCases[WikipediaData["arithmetic"], "Number" -> "Interpretation"]]

有一些大的数字,用罗马数字表示,“字符串长度”的概念没有多大意义:

RomanNumeral
& # 10005

RomanNumeral [7485696]

然后是0,罗马人没有明确的表示。但限制在“罗马字符串”数字,我们可以再次制作柱状图:

柱状图
& # 10005

直方图[Map[StringLength[RomanNumeral[#]]/IntegerLength[#] &][Select[IntegerQ[#] && 0 < # < 5000 &][TextCases[WikipediaData["arithmetic"], "Number" -> "Interpretation"]]]]

这里关键的是,有了Wolfram语言,我们就可以用计算概念来表达我们的想法,比如StringLengthTextCases选择柱状图.我们能够使用计算语言来表达我们的计算思维——以一种人类可以阅读,计算机可以计算的方式。

与编程语言的区别

作为一个实际问题,我们刚刚看到的计算语言的例子看起来与通常使用标准编程语言所做的任何事情都非常不同。但是计算语言和程序语言的根本区别是什么呢?

首先,计算语言试图从本质上讨论人们可能以计算方式思考的任何问题,而程序设计语言从本质上只讨论人们可以直接通过编程让计算机去做的事情。例如,计算语言本质上可以谈论现实世界中的事物,比如行星火星纽约或者一个巧克力曲奇饼干.程序设计语言本质上只能讨论计算机中的抽象数据结构。

不可避免地,计算语言必须比编程语言大得多,也要丰富得多。因为编程语言只需要了解计算机的操作,而计算语言则试图用尽可能多的知识和计算智能来了解世界和计算在它的内部。

公平地说,Wolfram语言是唯一一个完整计算语言的例子。但人们从中得到了一种重要的感觉。虽然标准编程语言的核心通常有几十个内建的基本函数,但是Wolfram语言有超过5600个-由于其中许多人分别代表了计算智能的主要部分,并且为了能够谈论真实世界,Wolfram语言也有数以百万计的实体各种各样的。是的,Wolfram语言已经有超过30年的精力充沛的持续发展投入其中。

有了一门编程语言,你当然可以开始编程了。事实上,许多标准编程语言都有各种各样的函数库,这些函数库都是为它们而创建的。但是这些库的目标与真正的计算语言的目标并不完全相同。是的,它们提供了特定的“要调用的函数”。但他们并没有试图创造一种方式来表达或谈论广泛的计算思想。要做到这一点,需要一种连贯的计算语言——这些年来我一直在用Wolfram语言构建这种语言。

程序设计语言(不用说)是用来编写程序的东西。虽然人们通常认为人类能够读懂程序(至少在某种程度上)是可取的,但最终的目的是提供一种方法来告诉计算机该做什么。但是计算语言还可以实现其他一些事情。因为它可以作为一种表达媒介计算交流想法对人类和电脑都是如此。

即使是在处理抽象的算法时,标准编程语言也通常希望使用某种“伪代码”来描述算法,而不涉及实际实现的细节(通常是繁琐的)。但是,计算语言的部分思想总是有一种方法直接在语言中表达计算思想:具有高级的表达性和伪代码的可读性,同时仍然使一切都是精确的,完整的,并立即在计算机上执行。

看看上面的例子,有一件事是显而易见的,那就是让计算语言具有符号性是至关重要的。在大多数标准编程语言中,x没有价值本身没有任何意义;它必须代表计算机内存中的某种结构。但是在计算语言中,我们必须能够拥有一些纯粹的符号,比如,代表现实世界中的实体,人们可以像处理其他类型的数据一样处理它们。

将所有事物都表示为符号表达式,这是一系列奇妙的统一,对于连贯地构建一种全面的计算语言至关重要。为了使计算语言尽可能容易被人类吸收,还有各种各样的接口细节问题,如having分层次结构笔记本,允许计算语言的细节页面显示等等

为什么不使用自然语言?

尤其是在这个时代机器学习人们可能会想,为什么需要一个精确定义的计算语言呢?为什么不使用自然语言呢?

Wolfram | Alpha提供了一个很好的示例(实际上,可能是目前存在的最复杂的示例),说明纯使用自然语言可以完成哪些工作。事实上,对于Wolfram|Alpha通常处理的这类简短问题,它证明了自然语言可以很好地工作。

但是如果一个人想要建立更复杂的东西呢?就像在没有符号的情况下做数学,它很快就变得不切实际。当我在写关于Wolfram语言的入门书——尝试创造练习为了它。练习的典型形式是:“用自然语言描述这个东西,并用Wolfram语言实现它”。在书的早期,这个方法很有效。但一旦事情变得更复杂,它就变得相当令人沮丧。因为我马上就知道我想用Wolfram语言说什么,但为了练习,我花了很多精力用自然语言表达出来,而且我想到的往往很难阅读,让人想起法律术语。

人们可以想象,只要有足够的反复,就可以用自然语言向计算机解释事情。但是要想清楚计算机理解了什么,我们需要一些更结构化的表示——这正是计算语言所提供的。

这当然不是巧合,Wolfram|Alpha的工作方式是首先翻译任何自然语言输入,它给精确的Wolfram语言-然后从它计算答案。

从某种意义上说,使用计算语言让我们能够利用过去几个世纪的精确科学和系统知识。在历史的早期,人们想象人们可以用文字和自然语言来推理一切。但在三、四个世纪以前,特别是在数学符号和其他数学思想出现的时候,人们清楚地认识到,如果一个人有一种结构化的、正式的方式来谈论世界,他就可以走得更远。而计算语言现在扩展了这一领域——将更广泛的东西引入正式计算思维的领域,并进一步超越了自然语言。

当然,试图使用自然语言的一个理由是“每个人都知道它”。但关键是要能够应用计算思维——而要系统地做到这一点,人们需要一种新的表达自己的方式,这正是计算语言所提供的。

计算语言如何利用自然语言

计算语言与自然语言有很大的不同,但它在构造过程中仍然使用自然语言和人们对它的理解。因为在某种意义上,计算语言中的“词”是基于自然语言中的词。例如,在Wolfram语言中,我们有这样的函数StringLengthTextCasesFeatureSpacePlot

每个函数都有一个精确的计算定义。但为了帮助人们理解和记住这些函数的作用,我们使用(非常小心地选择)自然语言的词在他们的名字。从某种意义上说,我们正在利用人们对自然语言的理解来创造更高层次的语言。(顺便说一下,我们的代码标题“通过这种机制,我们至少能够用英语以外的许多自然语言对所有内容进行注释。)

当涉及到计算语言必须处理的无数真实世界实体时,情况略有不同TextCases,你们都必须知道它叫什么,以及如何使用它。但对于像纽约这样的实体来说,你必须以某种方式掌握它,然后它就会像其他实体一样工作。想要得到它的一个方便的方法就是去要,通过随便什么(自然语言)名称你知道的。

例如,在Wolfram语言中,您可以使用“自由格式的输入框”。类型纽约它会被解读为官方的纽约市实体

纽约
& # 10005

\!\ \ * NamespaceBox[“LinguisticAssistant DynamicModuleBox[{排版'query $ $ =“纽约”,排版'boxes $ $ = TemplateBox[{\“\”纽约”,RowBox[{“实体”、“[”,RowBox[{“\”的城市 \"", ",", RowBox[{“{”,RowBox[{纽约“\” \"", ",", "\" 纽约 \"", ",", "\" 美国 \""}], "}"}]}], "]"}], "\" 实体(\ \ \”城市 \\\", {\\\" 纽约 \\\", \\\" 纽约\ \ \”,\ \ \ \”美国 \\\"}]\"", "\" 城市\ "},“实体”),排版'allassumptions $ $ ={{“类型”- >“冲突”,“词”——>“纽约”、“模板”——>“假如\ " ${词}\”是$ {desc1}。使用$ {desc2}”,而不是“数”- >“2”、“价值观”- >{{“名字”——>“城市”、“desc”——>“城市”,“输入”——>“* C。纽约_ *城市——“},{“名字”——>“VisualArts”,“desc”——>“照片”,“输入”——>“* C。纽约-_*VisualArts-"}}}}, Typeset`assumptions$$ = {}, Typeset`open$$ = {1, 2}, Typeset`querystate$$ = {"Online" -> True, "Allowed" -> True, "mparse.jsp" -> 0.274794`5.890552239367699, "Messages" -> {}}}, DynamicBox[ ToBoxes[AlphaIntegration`LinguisticAssistantBoxes["", 4, Automatic, Dynamic[Typeset`query$$], Dynamic[Typeset`boxes$$], Dynamic[Typeset`allassumptions$$], Dynamic[Typeset`assumptions$$], Dynamic[Typeset`open$$], Dynamic[Typeset`querystate$$]], StandardForm], ImageSizeCache -> {173., {7., 15.}}, TrackedSymbols :> {Typeset`query$$, Typeset`boxes$$, Typeset`allassumptions$$, Typeset`assumptions$$, Typeset`open$$, Typeset`querystate$$}], DynamicModuleValues :> {}, UndoTrackedVariables :> {Typeset`open$$}], BaseStyle -> {"Deploy"}, DeleteWithContents -> True, Editable -> False, SelectWithContents -> True]\)

你可以使用这个实体来进行计算:

GeoArea
& # 10005

GeoArea [\ !\ \ * NamespaceBox[“LinguisticAssistant DynamicModuleBox[{排版'query $ $ =“纽约”,排版'boxes $ $ = TemplateBox[{\“\”纽约”,RowBox[{“实体”、“[”,RowBox[{“\”的城市 \"", ",", RowBox[{“{”,RowBox[{纽约“\” \"", ",", "\" 纽约 \"", ",", "\" 美国 \""}], "}"}]}], "]"}], "\" 实体(\ \ \”城市 \\\", {\\\" 纽约 \\\", \\\" 纽约\ \ \”,\ \ \ \”美国 \\\"}]\"", "\" 城市\ "},“实体”),排版'allassumptions $ $ ={{“类型”- >“冲突”,“词”——>“纽约”、“模板”——>“假如\ " ${词}\”是$ {desc1}。使用$ {desc2}”,而不是“数”- >“2”、“价值观”- >{{“名字”——>“城市”、“desc”——>“城市”,“输入”——>“* C。纽约_ *城市——“},{“名字”——>“VisualArts”,“desc”——>“照片”,“输入”——>“* C。纽约-_*VisualArts-"}}}}, Typeset`assumptions$$ = {}, Typeset`open$$ = {1, 2}, Typeset`querystate$$ = {"Online" -> True, "Allowed" -> True, "mparse.jsp" -> 0.274794`5.890552239367699, "Messages" -> {}}}, DynamicBox[ ToBoxes[AlphaIntegration`LinguisticAssistantBoxes["", 4, Automatic, Dynamic[Typeset`query$$], Dynamic[Typeset`boxes$$], Dynamic[Typeset`allassumptions$$], Dynamic[Typeset`assumptions$$], Dynamic[Typeset`open$$], Dynamic[Typeset`querystate$$]], StandardForm], ImageSizeCache -> {173., {7., 15.}}, TrackedSymbols :> {Typeset`query$$, Typeset`boxes$$, Typeset`allassumptions$$, Typeset`assumptions$$, Typeset`open$$, Typeset`querystate$$}], DynamicModuleValues :> {}, UndoTrackedVariables :> {Typeset`open$$}], BaseStyle -> {"Deploy"}, DeleteWithContents -> True, Editable -> False, SelectWithContents -> True]\)]

当然,这种自由形式的输入可能有歧义。类型纽约第一个解释是纽约州:

纽约
& # 10005

\!\ \ * NamespaceBox[“LinguisticAssistant DynamicModuleBox[{排版'query $ $ =“纽约”,排版'boxes $ $ = TemplateBox[{美国纽约“\”,\“,RowBox[{“实体”、“[”,RowBox [{AdministrativeDivision“\” \"", ",", RowBox[{“{”,RowBox[{纽约“\” \"", ",", "\" 美国 \""}], "}"}]}], "]"}], "\" 实体AdministrativeDivision[\ \ \” \\\", {\\\" 纽约\ \ \”,\ \ \ \”美国 \\\"}]\"", "\" 行政区划\ "},“实体”),排版'allassumptions $ $ ={{“类型”- >“冲突”,“词”——>“纽约”、“模板”——>“假如\ " ${词}\”是$ {desc1}。使用$ {desc2}”,而不是“数”- >“2”、“价值观”- >{{“名字”——>“USState”、“desc”——>“州”,“输入”——>“* C。纽约_ * USState——“},{“名字”——>“城市”、“desc”——>“城市”,“输入”——>“* C。纽约-_*City-"}}}}, Typeset`assumptions$$ = {}, Typeset`open$$ = {1, 2}, Typeset`querystate$$ = {"Online" -> True, "Allowed" -> True, "mparse.jsp" -> 0.321865`5.9592187470275455, "Messages" -> {}}}, DynamicBox[ ToBoxes[AlphaIntegration`LinguisticAssistantBoxes["", 4, Automatic, Dynamic[Typeset`query$$], Dynamic[Typeset`boxes$$], Dynamic[Typeset`allassumptions$$], Dynamic[Typeset`assumptions$$], Dynamic[Typeset`open$$], Dynamic[Typeset`querystate$$]], StandardForm], ImageSizeCache -> {333., {7., 15.}}, TrackedSymbols :> {Typeset`query$$, Typeset`boxes$$, Typeset`allassumptions$$, Typeset`assumptions$$, Typeset`open$$, Typeset`querystate$$}], DynamicModuleValues :> {}, UndoTrackedVariables :> {Typeset`open$$}], BaseStyle -> {"Deploy"}, DeleteWithContents -> True, Editable -> False, SelectWithContents -> True]\)

按小点你可以说你想要纽约市:

纽约
& # 10005

\!\ \ * NamespaceBox[“LinguisticAssistant DynamicModuleBox[{排版'query $ $ =“纽约”,排版'boxes $ $ = TemplateBox[{\“\”纽约”,RowBox[{“实体”、“[”,RowBox[{“\”的城市 \"", ",", RowBox[{“{”,RowBox[{纽约“\” \"", ",", "\" 纽约 \"", ",", "\" 美国 \""}], "}"}]}], "]"}], "\" 实体(\ \ \”城市 \\\", {\\\" 纽约 \\\", \\\" 纽约\ \ \”,\ \ \ \”美国 \\\"}]\"", "\" 城市\ "},“实体”),排版'allassumptions $ $ ={{“类型”- >“冲突”,“词”——>“纽约”、“模板”——>“假如\ " ${词}\”是$ {desc1}。使用$ {desc2}”,而不是“数”- >“2”、“价值观”- >{{“名字”——>“城市”、“desc”——>“城市”,“输入”——>“* C。纽约_ *城市——“},{“名字”——>“VisualArts”,“desc”——>“照片”,“输入”——>“* C。纽约-_*VisualArts-"}}}}, Typeset`assumptions$$ = {}, Typeset`open$$ = {1, 2}, Typeset`querystate$$ = {"Online" -> True, "Allowed" -> True, "mparse.jsp" -> 0.274794`5.890552239367699, "Messages" -> {}}}, DynamicBox[ ToBoxes[AlphaIntegration`LinguisticAssistantBoxes["", 4, Automatic, Dynamic[Typeset`query$$], Dynamic[Typeset`boxes$$], Dynamic[Typeset`allassumptions$$], Dynamic[Typeset`assumptions$$], Dynamic[Typeset`open$$], Dynamic[Typeset`querystate$$]], StandardForm], ImageSizeCache -> {173., {7., 15.}}, TrackedSymbols :> {Typeset`query$$, Typeset`boxes$$, Typeset`allassumptions$$, Typeset`assumptions$$, Typeset`open$$, Typeset`querystate$$}], DynamicModuleValues :> {}, UndoTrackedVariables :> {Typeset`open$$}], BaseStyle -> {"Deploy"}, DeleteWithContents -> True, Editable -> False, SelectWithContents -> True]\)

为了方便起见,这里的输入是自然语言。但是输出——有时经过一点消歧之后——是精确的计算语言,可以在任何需要的地方使用。

总的来说,能够使用自然语言来指定计算语言的小块是非常强大的。要表达大规模计算思维,就需要计算语言的形式和结构。但是“小话语”可以用自然语言给出,比如Wolfram| alpha,然后翻译成精确的计算语言:

纽约的人口
& # 10005

\!\ \ * NamespaceBox[“LinguisticAssistant DynamicModuleBox[{排版'query $ $ =“纽约的人口”,排版'boxes $ $ = RowBox [{TemplateBox[{\“\”纽约”,RowBox[{“实体”、“[”,RowBox[{“\”的城市 \"", ",", RowBox[{“{”,RowBox[{纽约“\” \"", ",", "\" 纽约 \"", ",", "\" 美国 \""}], "}"}]}], "]"}], "\" 实体(\ \ \”城市 \\\", {\\\" 纽约\ \ \”,纽约\ \ \” \\\", \ \\\" 美国 \\\"}]\"", "\" 城市\ "},“实体”,“(”,TemplateBox[{“\”城市人口\”“RowBox[{“EntityProperty”、“[”,RowBox[{“\”的城市 \"", ",", "\" 人口 \""}], "]"}], "\" EntityProperty[\ \ \”的城市 \\\", \\\" 人口 \\\"]\""}, " EntityProperty "], "]"}], 排版'allassumptions $ $ ={},排版'assumptions $ $ = {},排版'open $ $ ={1,2},排版'querystate $ $ ={“在线”——>真的,“允许”——>真的,“mparse.jsp”——0.701535 > 6.297594336611864,”消息 " -> {}}}, DynamicBox [ToBoxes [AlphaIntegration 'LinguisticAssistantBoxes[”“4、自动、动态(排版'query $ $),动态(排版'boxes $ $),动态(排版'allassumptions $ $),动态(排版'assumptions $ $),动态[Typeset 'open $$],动态[Typeset 'querystate $$]], StandardForm], ImageSizeCache ->{291。,{11所示。, 18岁。}}, TrackedSymbols: >{排版'query $ $,排版'boxes $ $,排版'allassumptions $ $,排版'assumptions $ $,排版'open $ $,排版'querystate $ $}], DynamicModuleValues: > {}, UndoTrackedVariables: >{排版'open $ $}], BaseStyle - >{}“部署”,DeleteWithContents - >没错,可编辑- > False, SelectWithContents - >真]\)
世界上人口最多的5个城市
& # 10005

EntityClass[“城市”,{EntityProperty[“城市”,“人口”]->TakeMaximum[5]}//EntityList
用紫色绘制余弦曲线
& # 10005

Plot[Cos[x], {x, -6.6, 6.6}, PlotStyle ->紫色]

什么是计算语言

我认为到目前为止,毫无疑问,计算范式的引入是上个世纪最重要的智力发展。展望未来,我认为计算语言对于广泛使用这种范式将是至关重要的,就像几个世纪以前,数学符号对于启动数学范式的广泛使用是至关重要的。

如何表达和交流“计算X”领域的思想?低级编程语言代码不能做到这一点。相反,人们需要的是能够直接谈论该领域的事情——不管它们是什么基因动物单词战斗之类的。人们还需要一些人类容易阅读和理解的东西。这正是计算语言所能提供的。

当然,计算语言还有一个巨大的好处,那就是计算机可以理解它,它可以用来指定要做的实际计算。换句话说,通过能够用计算语言表达一些东西,你不仅找到了一种与人类交流的好方法,你还建立了一种可以利用实际计算能力自动生成东西的东西。

我认为,随着时间的推移,我们会清楚地看到,作为一种交流媒介的计算语言的存在,最终成功地启动了大量的计算X领域。因为只有这样,这些领域的想法才能以一种具体的形式出现,人们才能进行思考。

计算语言将如何呈现?我经常怀疑,这将是我所说的计算论文.一篇计算文章混合了自然语言文本和计算语言——以及由计算语言描述的实际计算的输出。这有点像过去几个世纪以来,技术论文通常依赖于混合文本和公式。

但计算机论文的功能要强大得多。一方面,人们不仅可以在计算文章中阅读计算语言,而且还可以立即在其他地方重用它。此外,当一个人写一篇计算机辅助的文章时,这是一个计算机辅助的活动,在这个活动中,一个人与计算机分担负荷。人类必须编写文本和计算语言,然后计算机可以自动生成计算语言所描述的各种结果、信息图等。

在实践中,重要的是计算论文可以在Wolfram笔记本,在桌面,这些笔记本可以包含各种动态和计算元素。

人们可以期望将计算论文用于各种各样的事情,无论是论文、报告、练习还是其他。我怀疑,用计算语言编写的计算论文,将成为计算领域交流的主要形式。

我怀疑我们能否预见到哪怕是一小部分计算语言将发挥关键作用的领域。但有一个地方已经很清楚了,那就是定义计算合同.在过去,合同基本上都是用自然语言写成的,或者至少是用法律术语的变体。但是计算语言提供了另一种选择。

使用今天的Wolfram语言,我们无法涵盖每一份合同中的所有内容。但是我们已经很清楚我们如何使用计算语言来表示世界上各种各样的东西这些东西是合同的主体。关键是,通过计算语言,我们可以写出人类和机器都能理解的精确合同。

迟早会有的计算合同无处不在:用于商业、定义目标、人工智能伦理等等。而计算机语言将使这一切成为可能。

大约500年前,当使用自然语言的识字开始普及时,它给世界的组织方式和文明的发展带来了翻天覆地的变化。随着时间的推移,我认为这是不可避免的广泛掌握计算语言.当然,这将导致计算思维更广泛的应用(例如,许多“计算X”领域的开发)。就像我们今天的世界是充满了自然语言写的,所以在未来我们可以预期会有计算机语言都定义了一个对我们人类从计算的角度去思考,并提供了一个人类思维和计算之间的桥梁,机器和AIs可以做。

它为何如此独特?

我已经讲了很多关于计算语言的一般概念。但是在今天的世界中,实际上只有一个完整的计算语言的例子:Wolfram语言。乍一看,这么明确地说出这一点似乎有些奇怪。世界上有这么多科技,怎么可能有这么独特的东西呢?

但事实确实如此。我想当人们意识到我们已经在Wolfram语言上工作了好几年后,这就不那么令人惊讶了三十多年前——或者说超过现代计算机历史的一半。事实上,我们能够持续追求Wolfram语言的发展的时间跨度比历史上几乎任何其他软件系统都要长。

我是否预见到了Wolfram语言作为一种完整的计算语言的出现?不完全是。当我第一次开始开发现在的Wolfram语言时,我想让它尽可能通用——并且在表示计算思想和过程时尽可能灵活。

起初,它最具体的应用是在数学和各种建模。但随着时间的推移,我意识到越来越多的东西可以融入我们定义的计算框架。渐渐地,这也包括了现实世界中的事物。然后,大约15年前,我意识到,是的,用我们定义的整个符号语言,我们可以开始系统地表示所有这些东西,比如城市化学物质就像我们之前表示抽象事物一样。

我一直有一个目标,那就是把尽可能多的知识放到这门语言里,并且尽可能多地自动化。但从一开始,我就确定这门语言是基于小套原则而且随着公司的发展,它保持了一个连贯和统一的设计。

不用说,这并不容易。的确如此我的日常活动30多年来(例如,300多个小时的直播在过去的一年)。这是一个困难的过程,既要深入理解语言涵盖的每一个领域,又要进行一系列复杂的判断。但正是这种设计的一致性使得语言能够保持其统一性,即使它已经包含了关于现实世界的各种知识,以及所有其他使它成为完整计算语言的东西。

使Wolfram语言成为可能的部分原因是它的原则和基本框架的成功。但要真正发展它,还需要创建一个巨大的技术和内容塔——以及无数算法和元算法的发明,以及获取和管理大量数据。

这是一种学术研究和大规模工程的奇怪结合,我们很幸运能够在几十年里持续不断地追求它。在很多方面,这都是我的个人使命。在此过程中,人们经常问我如何划分我们正在构建的东西。它是一个计算系统吗?它是一个百科全书式的数据收集吗?它是一种编程语言吗?

嗯,这些都是。但这只是故事的一部分。随着Wolfram语言的发展,它离现有的分类有多远变得越来越明显。直到最近,我才终于明白我们已经设法构建了什么:世界上唯一完整的计算语言。理解了这一点,我们就开始更容易理解这些年来我们一直在做的事情如何符合思想史的弧线,以及它的一些影响可能会向前发展。

从实用的角度来看,能够回答这个显而易见的基本问题是非常棒的:“什么是Wolfram语言?”因为现在我们有了一个明确的答案:“这是一种计算语言!”是的,这非常重要!

6评论

  1. 这篇文章正是我两周前在JPL、Aerospace和SPAWAR向人们提出的观点。也就是说,WL不同于其他编程语言,因为它提供了一种精确思考数学和计算问题的方式。直到最近,数学才是表示复杂关系的主要方式概念之间的相互作用,但现在符号计算不仅允许人们这样做,还允许人们进行相关的计算。正如学习数学提供了思考概念的框架一样,符号计算和WL尤其提供了一个表示复杂关系及其计算的框架。语言不仅反映了ects以萨皮尔-沃尔夫假说规定的方式影响思维,但对思维产生深远影响。

    迈克尔·凯利
  2. 我在AP计算机科学原理课上分享了这一点(我们经常谈论开放数据、数据科学以及计算如何影响现实世界)。Wolfram研究应该开发一个完整的AP CSP课程!

    克里斯
  3. 让人印象深刻。展现WL优势的一个好方法是用它来学习海豚的语言,就像电影《降临》(Arrival)中所做的那样,但只有声音,没有文字。

  4. 我已经使用Mma 7.0(学生),现在有一个专业执照。由于一个奇怪的巧合,可能是由于我需要在工作中使用另一个主要的数学/建模软件,我在想“是什么让Mathematica (Mma)与众不同?”“就在几天前。
    关于综合格斗/西城,我最欣赏的是以下几点(没有双关语):
    (i)“一切都是清单”的基本思想,
    (ii)根据公认的数学函数名或与自然选择的词匹配而精心选择的命令列表,以实现所需的操作和
    (iii) Mma能够将任何东西(数字,图片,符号-任何东西)封装在命令的参数列表中并使用它进行计算。

    我把其他三个数学专业的M都用在了数学上,我可以说,没有什么比这更接近了。

  5. 斯蒂芬:

    让我们进一步探讨这个问题。想象一下,在不太遥远的未来,有工厂生产机器人或机器人。我指的不是那种能组装汽车的机器人……我指的是完全独立、有知觉的机器人。他们能想到。

    问题来了……什么语言被用作思维过程的基础?它不应该仅仅是人工智能或神经网络。在概念和“定量思维”(你们称之为计算思维)之间有一座桥梁。那么你的意思是…Wolfram语言将成为智能机器的基础语言。

    这意味着机器人不仅可以通过计算来思考,还可以重新构造语言,使其成长,成为一种不断进化的概念语言。

    实际上,你的语言成为了电影《2001太空漫游》中HAL的基础。

    只是一些想法。

    皮特·波洛克加州

    彼得·波洛克
  6. 我认为西城还可以做得更好。特别是,我认为语言的语法可以更接近自然语言,而不会造成不可解决的歧义。考虑这样的语法:

    “一些人的脸”=“得到一些脸”
    发现(某些人的脸)的面部特征

    它具有一定的优良性能。例如,可以构建一种解析机制,通过语义意义的相似性度量来解决实际定义函数的歧义问题;这样,如果第一个函数实际上被不同的调用,软件将查找并帮助选择一个正确的函数。这个语法的另一个好的方面是,基于命令式条款是如何制定的最自然的语言:一个动词,然后对其运作主体,所以一般的感觉会更喜欢阅读自然语言而不像在读一本发明了形式主义。另外,想象一下,使用这种语法表示,可以在支持手写输入的设备上书写,几乎像笔和纸的体验,但要好一百万倍:).顺便说一下,这种语言的语法是完全明确的。

    你不觉得WMath应该升级一下吗?:)

    威利
Baidu