编程
控制操作员
程序流程
我们首先描述那些允许生成条件分支和各种循环的操作符。用户应该知道,在遍历列表的不同方式中也会出现其他类型的循环结构。它们在本节中进行了描述基本列表操作.
条件运算符:如果(бbool›,бexpr›)
描述:如果布尔条件嘘声›
计算结果为真的
,然后是表达式出口›
已评估。的典型用法如果
-运算符是副作用的条件评估。
例子:如果x个
具有负值。
x=5;如果(x<0,println(“x现在为负数”);x=-3;如果(x<0,println(“x现在为负数”);
x现在为负值
返回值:在这种情况下如果
-功能是expr›。否则,___
返回。
x=5;如果(x<0,-1);
___
x=-3;如果(x<0,-1);
-1
条件分支运算符:如果(бbool›、бexpr1›、expr2›)
描述:如果布尔条件›布尔›
计算结果为真的
,然后是表达式expr1›
已评估。如果嘘声›
计算结果为假
,那么expr2›
已评估。无论哪种情况,都会返回计算的表达式的值。因此,这个三元版本的如果
-运算符对if/then/else功能进行编码。此版本的如果
-操作员:首先如果
-运算符用于强制程序部件的条件求值(这通常会导致副作用)。
例子:此代码片段在控制台上打印一条消息,显示是否x个
为正、负或零。
描述(x):=如果(x<0,println(“x现在为负数”),如果(x>0,println(“x现在为正”),println(“x为零”)));描述(5);
x现在为正
描述(0);
x为零
描述(-7);
x现在是负数
第二次使用如果
-运算符是根据由嘘声›
.这在定义函数时特别有用。
例子:此代码片段定义了函数f(x)
为绝对值函数(对于x个
).
f(x):=如果(x>0,x,-x);f(5)
5
f(-7)
7
例子:此代码片段采用几何元素A类(很可能是一个点),并根据其值将其颜色设置为红色或蓝色x个-坐标。
跳过测试:我们还不能在测试中使用几何元素。
A.color=如果(A.x>0,(1,0,0),(0,0,1))
触发运算符:触发器(›bool›,›expr›)
CindyJS中尚不可用!
描述:这个触发
运算符与如果
操作员。与…对比如果
,的触发
操作符具有动态风格。表达式出口›
在任何时候进行评估嘘声›
更改自假
到真的
.这意味着在拖动建筑时,如果<bool>假
在以前的实例中,现在真的
.该操作符的目的是在拖动结构时,每当发生事件时触发副作用。下面的代码片段演示了这种行为。
例子:此代码片段将在任何时候打印消息A类
穿过年-轴。
跳过测试:尚未实现操作符“触发器”。
触发器(A.x<0,println(“A现在进入x负半平面”)触发器(A.x>0,println(“A现在进入x正半平面”)
while循环:而(бbool›,бexpr›)
描述:这个虽然
运算符对表达式求值出口›
只要条件允许嘘声›
是真的。最后一次求值的结果作为函数的值返回。
例子:
x=0;总和=0;erg=当(x<4,x=x+1;总和=总和+x;println(x+“-->”+总和);总和);
此代码片段生成输出
1 --> 12 --> 33 --> 64-->10
评估结果为
评估后,变量的值伯格
是10
.提醒一句:人们应该意识到这样一个事实虽然
如果从未满足条件,操作可能很容易创建无限循环。
重复循环:重复(б数字›,б表达›)
描述:此运算符在CindyScript中提供了最简单的循环类型:出口›
已评估数字›
次。返回最后一次评估的结果。在评估期间出口›
特殊变量#
包含循环的运行变量。
例子:此代码生成前5个整数及其平方的列表。
重复(5,println(#+“平方是”+#^2))
1的平方等于12的平方等于43的平方等于94的平方等于165的平方等于25
修改人:这个重复
循环支持多种修改器。这些修饰符可用于控制循环的开始值、停止值和步长。修饰符开始
设置循环的起始值。修改器停止
设置循环的结束值。修饰符步
设置步长。可以任意组合修改器。只要没有设置所有三个修饰符,循环就会始终执行数字›
次。修改器只允许使用实值。下表显示了修饰符的不同用法。
a=[];重复(6,a=a++[#]);一
[1, 2, 3, 4, 5, 6]
a=[];重复(6,开始->4,a=a++[#]);一
[4, 5, 6, 7, 8, 9]
a=[];重复(6,停止->2,a=a++[#]);一
[-3, -2, -1, 0, 1, 2]
a=[];重复(6,步骤->3,a=a++[#]);一
[1, 4, 7, 10, 13, 16]
a=[];重复(6,停止->12,步骤->4,a=a++[#]);一
[-8, -4, 0, 4, 8, 12]
a=[];重复(6,开始->3,步骤->2,a=a++[#]);一
[3, 5, 7, 9, 11, 13]
a=[];重复(5,开始->3,停止->4,a=a++[#]);一
[3, 3.25, 3.5, 3.75, 4]
a=[];重复(5,开始->0,停止->-3,a=a++[#]);一
[0, -0.75, -1.5, -2.25, -3]
a=[];重复(6,开始->3,停止->4,步骤->0.4,a=a++[#]);一
[3, 3.4, 3.8]
重复循环:重复(б数字›、б变量›、т表达式›)
描述:此运算符与运算符相同重复(б数字›,б表达›)
,除了一个区别:run变量现在被分配给var›
.这允许使用具有不同运行变量的嵌套循环。
例子:此代码片段将绘制一个3×3的点数组。
重复(3,i,重复(3,j,绘制(i,j)));
线宽=1.2开始路径()弧(275.5、204.5、4、0、6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(275.5、204.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”strokeStyle=“rgb(0,0,0)”冲程()开始路径()弧(275.5、179.5、4、0、6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(275.5、179.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”冲程()开始路径()弧(275.5、154.5、4、0、6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(275.5、154.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”冲程()开始路径()弧(300.5、204.5、4、0、6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(300.5、204.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”冲程()开始路径()弧(300.5、179.5、4、0、6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(300.5、179.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”冲程()开始路径()弧(300.5、154.5、4、0、6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(300.5、154.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”冲程()开始路径()弧(325.5204.5,4,0,6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(325.5、204.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”冲程()开始路径()弧(325.5、179.5、4、0、6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(325.5、179.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”冲程()开始路径()弧(325.5、154.5、4、0、6.283185307179586)fillStyle=“rgb(0255,0)”填充()开始路径()弧(325.5、154.5、4.6、0、6.283185307179586)fillStyle=“rgb(0,0,0)”冲程()
变量限制在本地范围内:
v=992;a=[];重复(6,v,a=a++[v]);一
[1, 2, 3, 4, 5, 6]
v(v)
992
forall循环:对于所有人(list›,expr›)
描述:此操作员接受列表›
作为第一个论点。它产生一个循环,其中›出口›
针对列表的每个条目进行评估。在每次迭代中,运行变量#
获取相应列表项的值。
例子:
a=[“this”,“is”,“a”,“list”];对于所有(a,println(#))
此代码片段生成输出
forall循环:对于所有人(list›、var›和expr›)
描述:类似对于所有人(list›,expr›)
,但运行变量现在已命名var›
.同样,变量是表达式的局部变量。
v=993;对于所有([1,2,3],v,println(v))
12三
v(v)
993
强制评估:评估(expr›、modif1›、modif2›…)
CindyJS中尚不可用!
描述:此运算符强制评估表达式“expr›”。可以使用修饰符列表替换表达式的自由变量。替代变量仅在本地赋值。然后,将变量设置为评估之前的值。
例子:此代码片段的计算结果为7
.
跳过测试:“eval”尚未实现。
评估(x+y,x->2,y->5)
7
变量管理
以下描述解释了如何有意创建或销毁局部变量。用户应该知道,对于大多数情况,只需为变量赋值就可以动态创建变量。默认情况下,这些变量是全局变量。如果生成递归函数或想要创建函数库,则可能需要或建议使用局部变量。
创建变量:createvar(varname›)
和
销毁变量:删除变量(变量名›)
描述:这些操作符有助于手动管理局部变量的创建。创建值(x)
创建一个名为x个
,同时将旧值放入堆栈中。移除变量(x)
删除局部变量并从堆栈中恢复值。请注意,通常不必显式创建变量。它们在首次使用时自动生成。这个创造者
和删除变量
只有在希望为代码的某个局部区域保留变量名时,才应使用运算符。
例子:
x=10;println(“x现在是”+x);创造价值(x);x=5;println(“x现在是”+x);移除变量(x);println(“x现在是”+x);
此代码片段生成输出
为函数创建多个局部变量:地区性(name1›,name2›,…)
描述:此语句可以在函数的开头使用。它的效果几乎与地方的
语句并创建几个局部变量。然而,与地方的
语句中,当函数终止时,将自动删除变量。因此,显式调用释放
不需要。通常使用起来更方便区域性的
而不是使用地方的
.
变量在CindyScript中具有某种持久性。如果在语句中设置了变量的值,它将保持设置状态,直到更改为止。可以使用以下运算符显式清除变量。通常,将清除()
声明初始化
程序事件。
清除所有变量:清除()
CindyJS中尚不可用!
描述:此运算符清除所有变量。
清除特定变量:清除(Şvar›)
CindyJS中尚不可用!
描述:此运算符清除变量var›
.
对象关键变量的句柄:钥匙(var›)
CindyJS中尚不可用!
描述:通过对象›:按键›=某物›
宣言。
例子:可以将自由选择的键下的值与对象关联。这可以通过类似于以下代码的代码来完成:
跳过测试:尚不支持键。
A: “年龄”=34;A: “发色”=“棕色”;
这些赋值也可以通过类似的语法进行访问,如:
跳过测试:尚未支持密钥。
println(A:“年龄”);println(A:“发色”);
操作员钥匙
返回对象的所有关联键的列表。所以在这个例子中
跳过测试:尚不支持键。
println(键(A));
将返回列表[“年龄”,“发色”]
.