Tweet-a-Program简介

Wolfram语言一点代码可以发挥很大作用。为了利用这个事实让每个人都有一些乐趣,今天我们介绍Tweet-a-Program推文.

编写一个tweet-length Wolfram Language程序,并将其推送给@WolframTaP公司。我们的推特机器人将在Wolfram云并在推特上回复结果。

推文计划中的Hello World:GeoGraphics[Text[Style[“Hello!”,150]],GeoRange->“World”]

一个人可以用适合tweet的Wolfram语言程序做很多事情。这是一个78个字符的程序,可以生成由球体组成的颜色立方体:


图形3D[表[{RGB颜色[{i,j,k}/5],球体[{i、j、k},1/2]},{i,5},}

制作有趣的图案很容易:

图形[Riffle[NestList[Scale[Rotate[#,.1],.9]&,矩形[],40],{黑,白}]]

这是一个44个字符的程序,它看起来像一首可执行的诗:

图形3D@Point@Tuples@桌子[范围[20],{3}]

更简短地说,这里有一个小小的“分形黑客”,只有36个字符:


嵌套列表[Subsuperscript[#,#,#]&,o,6]

加入一些数学可以很容易地得到各种复杂的结构和模式:


三维等高线图[Cos[{x,y,z}/标准[{x、y、z}]^2]==0,{x,-0.5,0},{y,0,0.5},}

浮雕图[Arg[Fourier[Table[1/LCM[i,j],{i,512},{j,512}]]

你不需要拍照。例如,这里是π的前1000位数字,大小取决于它们的大小(请注意,是9s!):

行[Style[#,5#+1]&/@First[RealDigits[Pi,101000]]]

Wolfram语言不仅知道如何计算π,而且知道无数其他算法; 它也有大量固有知识关于真实世界。所以在语言上,你可以说电影国家化学品或者别的什么。这里有一个78个字符的程序,它将欧洲国旗拼贴在一起,大小根据国家人口而定:

ImageCollage[CountryData[“Europe”,“Population”]->CountryData[“Europe”,“Flag”]]

如果我们使用一些自由形式的自然语言在程序中。在典型的Wolfram笔记本界面中,可以使用CTRL+键=,但在Tweet-a-Program中,只需使用=[…]:

ImageCollege[=[欧洲人口]->=[欧洲国旗]]
ImageCollege[=[欧洲人口]->=[欧洲国旗]]

Wolfram语言知道很多关于地理以下是一个以埃菲尔铁塔为中心制作“10次幂”磁盘序列的程序:

表[GeoGraphics[GeoDisk[=[Eiffel Tower],数量[10^(n+1),“米”]],GeoProjection->“Bonne”],{n,6}]
表[GeoGraphics[GeoDisk[=[Eiffel Tower],数量[10^(n+1),“米”]],GeoProjection->“Bonne”],{n,6}]

有很多很多种真实世界知识内置于Wolfram语言中,包括一些相当模糊的语言。这是一张它所知道的大西洋上所有沉船的地图:

GeoListPlot[GeoEntities[=[大西洋],“海难”]]
GeoListPlot[GeoEntities[=[大西洋],“海难”]]

Wolfram语言也处理图像。这里有一个程序,可以获取行星,然后随机搅乱它们的颜色,使它们看起来更具异国情调:

ColorCombine[RandomSample[ColorSeparate[#]]]&/@EntityValue[=[行星],“图像”]
ColorCombine[RandomSample[ColorSeparate[#]]]&/@EntityValue[=[行星],“图像”]

这是我的一张照片,反复被边缘检测到:

NestList[EdgeDetect,=[Stephen Wolfram图像],5]
NestList[EdgeDetect,=[Stephen Wolfram图像],5]

或者,对于更“流行文化”的东西(并准备进行图像分析等),这里有一系列随机的电影海报:

网格[Partition[DeleteMissing[EntityValue[RandomSample[MovieData[],50],“Image”]],6]]

Wolfram语言非常适合单词和文本也是。比如,有一个程序可以生成一个“信息图”,显示英语和西班牙语单词首字母的相对频率:

行[Style[#,#2/70]&@@@Tally[ToUpperCase[StringTake[DictionaryLookup[{#,All}],1]]]&/@{“英语”,“西班牙语”}

这里——正好适合tweet——是一个计算平滑估计“爱丽丝”和“女王”在文本中的频率爱丽丝梦游仙境:

平滑直方图[Legend[First/@StringPosition[ExampleData@{“Text”,“AliceInWonderland”},#],#]&/@{”Alice“,”Queen“},Filling->Axis]

网络也是Tweet-a-Program的好素材。就像这里有一个生成网络序列的程序:

表[图表[表[i->Mod[i^2,n],{i,n}]],{n,105110}]

而在推文长度限制的正下方,是一个生成随机多面体云的程序:

Graphics3D[Table[{RandomColor[],Translate[PolyhedronData[RandomChoice[Polyhedron Data[]]][[1],RandomReal[20,3]]},{100}]]

Wolfram语言中最短的“有趣的程序”是什么?

在某些语言中,它可能是一个“quine”——一个输出自己代码的程序。但在沃尔夫拉姆语言中,奎因完全是微不足道的。因为一切都是象征性的,所以制作奎因只需要一个字符:

x个

使用Wolfram语言中的内置知识,您可以制作一些输出有趣的非常短的程序。比如,这里有一个15个字符的程序,它从内置数据生成一个关于:

结数据[{8,4}]

一些简短的程序很容易理解:

网格[Array[Times,{12,12}]]

制作简短的“神秘”节目很有趣。这个在做什么?

嵌套列表[#^#&,x,5]

或者这个?

固定点列表[#/.{s[x_][y_][z_]->x[z][y[z]],k[x_][y_]->x}&,s[s[s]][s][s][s][k],10]//列

或者,很多更具挑战性,这个:

样式[\[FilledCircle],5#]&/@(如果[#1>2,2#0[#1-#0[#1-2]],1]&/@Range[50])

事实上,我花了很多年的时间研究短程序,以及它们的作用和建立一个整体计算宇宙科学在我的大书中描述一种新的科学。这一切都始于三十多年前计算机实验我现在只需要一条推特就可以做到:

GraphicsGrid[Partition[Table[ArrayPlot[CellularAutomaton[n,{{1},0},{40,All}]],{n,0255}],16]]

我有史以来最喜爱的发现也是可推的:

数组图[CellularAutomaton[30,{{1},0},100]]

如果你在计算宇宙中进行搜索,很容易找到各种令人惊奇的东西:

数组图[CellularAutomaton[{1635,{3,1}},{{1},0},500],颜色函数->(色调[#/3]&)]

终极问题就是在计算宇宙的某个地方是否有一个程序代表我们整个物理宇宙。这个程序足够短,可以用Wolfram语言推特吗?

但不管怎样,我们已经知道,Wolfram语言让我们能够编写出令人惊叹的推特程序,内容极其多样。用了四分之一个多世纪的时间,才建成了现在使用Wolfram语言的巨大的知识和自动化塔。但正是这种丰富性使得在推特空间中表达这么多内容成为可能。

在过去,只有普通的人类语言才能丰富到有意义地用于推特。但现在令人兴奋的是,Wolfram语言似乎已经超过了一种通用表达能力的门槛,这也让它能够有意义地在推特上发布。因为就像普通的人类语言一样,它可以谈论各种事情,并代表各种想法。但它也有其他特点:与普通人类语言不同,它中的一切都有精确定义的含义,你写的东西不仅可读,而且可以运行。

使用普通人类语言的推文(大概)旨在对阅读者的大脑产生一些影响。但不同的人可能会产生不同的效果,通常很难确切地知道它是什么。但Wolfram语言中的推文有一个定义明确的效果,你可以在运行时看到。

将Wolfram语言与普通人类语言进行比较是很有趣的。像英语这样的普通语言有几万个相当常见的“内置”单词,不包括专有名称等。Wolfram语言大约有5000个内置命名对象,不包括由专有名称指定的类似实体的构造。

Wolfram语言与普通人类语言的共同点是,它不仅可以被人类写入,而且可以被人类读取。有词汇需要学习要学习的几个原则-但作为一个人,很快就会开始理解典型的Wolfram语言程序。

有时,用普通人类语言对Wolfram语言程序进行至少一个粗略的翻译(或“解释”)是相当容易的。但对于Wolfram语言程序来说,表达一些很难交流的东西是很常见的,至少在普通人类语言中是很简洁的。这不可避免地意味着,有些事情在沃尔夫拉姆语言中很容易思考,但在普通人类语言中却很难思考。

就像普通语言一样,沃尔夫拉姆语言也有语言艺术。有阅读和理解。还有写作和写作。总是有很多表达方式,但现在有了正确性的精确概念,以及各种各样的措施,如执行速度。

就像普通的人类语言一样,还有优雅的问题。人们可以同时考虑意义和表达。人们可以考虑提炼事物的本质来创造一种“代码诗”。

当我第一次提出Tweet-a-Program时,它看起来就像是一个巧妙的黑客。但我意识到,它实际上是一扇通向一种新的表达方式的窗户,是一种人类和计算机可以共享的交流形式。

当然,这也是为了好玩。当然,对我来说,创建一个微小而优雅的程序宝石,可以产生令人惊叹的东西,这让我感到非常满意。

现在我很高兴看到每个人都会用它做什么。会创造出什么样的东西?会有什么流行的“代码明信片”?谁会受到代码的启发?将提出并解决哪些难题?将定义和赢得哪些比赛?还有什么伟大的代码艺术家和代码诗人会出现?

现在我们有了可推的程序,让我们去寻找可能的…

为开发和测试程序Tweet-a-Program推文,您可以免费登录到Wolfram编程云,或使用任何其他Wolfram语言系统,在桌面或云中。查看一些详细信息在这里.


如需评论,请访问此帖子的副本Wolfram博客»

发布时间:新技术Wolfram语言