CindyScript的一般概念
本节简要介绍辛迪脚本.
CindyScript是一种函数式语言
中的所有计算辛迪脚本通过执行函数来执行。函数可以被视为一种计算,它接受函数的参数并产生某种输出值。许多计算已经可以只用初等函数来表示。因此,代码片段
计算前10个整数的和。在这里..
是一个接受两个整数的函数,一
和b条
,并从中生成所有整数的列表作为输出一
到b条
.因此1..10
生成包含10个整数的列表:[1,2,3,4,5,6,7,8,9,10]
.功能总额(_)是一元的(也就是说,它只需要一个参数)。它以数字列表作为输入参数,并生成与列表项之和对应的数字作为输出。因此,如果我们键入总和(1..10)
在命令shell中,系统将响应结果55
.
此外,看似程序性的声明,例如如果
-语句作为函数实现。例如,表达式
如果(x~60~y,打印(“我的”),打印((“你的”))
演示功能如果
,需要三个参数。它检查第一个参数的条件x<y
根据结果,计算第二个或第三个参数,即打印(“我的”)
或打印(“您的”)
。此评估的结果将是如果(_,_,_)
功能。因此,上述表达式等价于
根据对条件的评估如果
函数返回第二个参数或第三个参数的值。
副作用
如果函数在中求值辛迪脚本,它可能有“副作用”。副作用对于辛迪脚本项目和灰姑娘建筑。典型的副作用是:
- 图纸:A类辛迪脚本语句可能会导致在构造视图中进行绘图操作。
- 作业:A类辛迪脚本操作可能会更改几何对象的位置、颜色、大小等。
- 变量赋值:A类辛迪脚本语句可以创建变量并为其赋值。
- 函数创建:A类辛迪脚本语句可以创建和定义以后可以使用的函数。
例如,语句
产生在某个位置绘制点的副作用(0,0)
.声明
设置点的颜色A类到白色.
控制流程
大多数用户可能已经习惯了顺序编程语言,如C、Java、Pascal和Basic。实际上,在辛迪脚本与用这些语言编写代码没有太大区别。辛迪脚本有一个;
操作人员<语句1><语句2>
只需首先计算语句1
然后声明2
。的返回值;
运算符是最后一条语句的结果。编写顺序程序相对比较简单,它看起来类似于用顺序语言编写的程序。例如,程序
在抛物线上创建九个点。功能重复(<number>、<variable>、<program>)
创建执行以下操作的循环<数字>
跑。在每次运行中,变量<变量>
递增(从开始1
). 循环的主体是两条线j=i*i;draw([i,j]);
.
无显式键入
辛迪脚本旨在以最少的语法开销提供最大的功能。因此,辛迪脚本没有显式的值类型。像许多其他语言一样,辛迪脚本使用概念变量然而,与其他语言相比,变量不属于特定类型。任何类型的任何值都可以分配给任何变量。一方面,这给了程序员很大的自由来生成强大的代码。例如,以下代码片段
定义一个函数f(x,y)
它可以用于添加整数或复数以及向量或矩阵。另一方面,这种自由要求程序员在编写程序时承担一些责任,以便生成语义上有意义的代码。当函数试图计算无意义的表达式时,程序不会自动终止。相反,该函数将返回值___
,表示无意义的表达。因此,在上面的示例中,f([1,2],[3,4])
将执行矢量相加并计算为[4,5]
,而表达式f(4,[3,4])
无意义,计算结果为___
.
局部变量:#变量
中有几个环形结构辛迪脚本例如,操作员选择(<列表>,<条件<)
遍历的所有元素<列表>
并返回满足条件的对象列表。要做到这一点,必须有一种方法将要测试的元素送入条件。默认情况下,辛迪脚本使用变量#,用作运行变量的句柄。例如,语句
返回介于1
和30
此外,循环使用这个运行变量,因此
打印所有数字1
到9
。也可以通过提供显式运行变量作为第二个参数来使用它。因此选择(1..30,i,isodd(i))
和重复(9,i,打印(i))
等同于上述声明。
CindyScript的数据类型
正如已经提到的,辛迪脚本没有显式类型。然而,任何价值变量属于显式类型。基本类型辛迪脚本是
- <数字>:任何数值。数字可以是整数、实数或复数。
- <列表>:任意对象的列表。这样的列表在语义上也可能具有向量或矩阵的含义。
- <字符串>:文本表达式。
- <地理>:属于构造的几何对象。
- <布尔值>:A值
真的
或假
.
数字类型特别强大,因为它可以包含整数、浮点数和复数。
变量及其范围
自辛迪脚本没有显式的变量类型,它允许根据需要“动态”创建变量。变量是在第一次赋值时创建的。如果x个
尚未使用,语句
创建变量x个
并赋值7
变量赋值后,在其余的执行过程中可以访问其值。值也可能被函数的局部变量部分重载。因此,在定义为
的值x个
和年
是函数的局部参数。函数执行完成后x个
已恢复。还可以使用区域(…)
操作员。
几何元素及其特性的获取
变量也被用作几何对象的一种句柄。它们构成了辛迪脚本灰姑娘和CindyLab公司。如果变量的名称与几何对象的标签相同,则它会提供指向该几何对象的链接。变量的值仍然可以通过显式赋值来重载。可以通过访问几何对象的不同属性(位置、颜色、大小等).操作员。因此,如果A类
是几何结构中的一个点,表达式A.尺寸
返回表示点大小的整数。表达式A.xy=[3,4]
将点指定给坐标[3,4]
此外,可以通过访问与物理模拟相关的属性(质量、速度、动能等).操作员。
修改人
许多运营商辛迪脚本提供比第一眼看到的更多的功能。通常可以使用所谓的修改器访问这些功能。运算符的定义方式是,其默认用法为大多数情况提供合适的行为。但是,可能需要修改默认行为。为此,在运算符的调用中列出相应的修饰符。例如,语句
在某个位置绘制点(0,0)
。默认情况下,点为绿色,大小为3。声明
绘制([0,0],大小->15,颜色->[1,1,0])
绘制一个大小为15的黄色点。修饰符必须用逗号隔开。它们可以在函数调用的任何位置以任何顺序出现。
列表/向量/矩阵
辛迪脚本提供列表作为基本数据类型。列表是用于定义更复杂数据结构的基本范例。除了作为枚举对象的明显应用外,列表还可以用于表示向量和矩阵。向量是一组数字。向量长度相同的向量列表将被解释为矩阵。辛迪脚本提供了组合向量、矩阵和数字的常用操作。取决于一
和b条
,表达式a*b类
可以表示数字的常用乘法、矩阵乘积或矩阵/向量乘法。
在辛迪脚本在向量级别上,行向量和列向量没有区别。然而,通过使用合适的函数可以转换长度向量n个
到(n个×1)矩阵或到a(1×n个)矩阵。
图纸
辛迪脚本提供了许多语句,可以直接在几何视图的画布上绘制。利用这一特征,可以显著丰富灰姑娘结构的行为。可以绘制点、线、线段、多边形、表格、函数等。但是,重要的是不要将脚本绘制的几何对象与几何中活动的几何对象混淆。在灰姑娘模式中,不可能使用此类脚本绘制元素作为定义者。
如果要使用脚本修改活动元素,则必须首先构造它们,然后使用辛迪脚本声明。可以通过设置其位置参数来移动所有自由图元。
执行槽
这个灰姑娘的脚本窗口其中一个人进入辛迪脚本代码包含几个可以输入文本的插槽。特定的插槽称为
每个条目都对应于触发脚本执行的场合。例如绘制slot直接在视图中的屏幕刷新之前执行。这个初始化插槽直接在辛迪脚本代码被解析。模拟开始在按下播放按钮时,在开始动画之前执行。使用这种机制,可以编写对用户事件做出良好反应的程序。
运行时错误处理
辛迪脚本在运行时环境中运行。原则上,构造中的每一个微小移动都会导致对脚本的评估。为了实现这一点,必须在语言中就运行时错误的发生做出合理的设计决策。如果通常的用户交互被反复出现的错误消息打断(特别是当一个构造在HTML页面中用作小程序时),这将非常分散注意力。因此,中的错误处理辛迪脚本在运行时,只报告前十个错误。然而,运行时错误永远不会中断执行。在程序流中,只需忽略运行时错误(例如被零除或访问不存在的数组索引)。错误的函数求值只会产生一个未定义的结果,然后继续计算(可能会导致更多的未定义结果)。即使出现错误,这通常也能保证构造的流畅性。
由于不报告运行时错误,此功能可能会使程序调试有点麻烦。为此,有一个特殊功能,断言(<boolean>,<string>)
,用于检查是否满足关于当前数据的某个假设。如果第一个参数中的假设不满足,则会打印第二个参数的消息。