Revised 2018-12-17
数字number,字word,表list,布尔bool
- 数字的字面量以[0~9]或'-'开头,不区分整数,浮点数
- 字的字面量以双引号
"开头,不含空格,采用Unicode编码。在"后的任何内容,直到空格(包括空格、tab和回车)为止的字符都是这个字的一部分,包括其中可能有的"和[]等符号 - 表的字面量以方括号
[]包含,其中的元素以空格分隔;元素可是任意类型;元素类型可不一致 - 布尔量只有两个值:
true和false - 数字和布尔都是字的特例,因此,作为字面量,
"12和12等价,"true和true等价
基本形式:操作名 参数
操作名是一个不含空格的词,与参数间以空格分隔。参数可以有多个,多个参数间以空格分隔。每个操作所需的参数数量是确定的,所以不需要括号或语句结束符号。有的操作有返回值,有的没有。
一个程序就是操作的序列。
基本操作有:
-
//:注释 -
make <word> <value>: 将value绑定到word上,这里的word必须以字母开头。绑定后的word称作名字,位于命名空间。如果对基本操作的名字重新命名,则该名字不再表示基本操作,且无法撤销这个命名//这样子不行 把全部的关键字都初始化到binding中,然后调用它的时候,要经过去binding中选择的过程。可以实现对关键字的make。初始化的是(key,value)==>(make,make)这种。
number和bool实现为字的特性。word_type = 1; number_type = 3; bool_type = 5; list_type = 2;
那我就没有办法让我的make变成read,也就没有办法让其他的字变成make,也就是说我只能让make失效,不能让他复原
-
thing <word>:返回word所绑定的值 -
:<word>:与thing相同 -
erase <word>:清除word所绑定的值 -
isname <word>:返回word是否是一个名字,true/false -
print <value>:输出value -
read:返回一个从标准输入读取的数字或字 -
运算符operator
-
add,sub,mul,div,mod:<operator> <number> <number> -
eq,gt,lt:<operator> <number|word> <number|word> -
and,or:<operator> <bool> <bool>比较与计算:如果不全是数字或者布尔,按word的规则
-
not:not <bool>
-
第一次提交做到这里
-
readlist:返回一个从标准输入读取的一行,构成一个表,行中每个以空格分隔的部分是list的一个元素 -
repeat <number> <list>:运行list中的代码number次
make <word> [<list1> <list2>]
word为函数名
list1为参数表
list2为操作表
<functionName> <arglist>
<functionName>为make中定义的函数名,不需要双引号"
<arglist>是参数表,<arglist>中的值和函数定义时的<list1>中名字进行一一对应绑定
-
output <value>:设定value为返回给调用者的值,但是不停止执行要有一个局部的binding,作为局部的命名空间
-
stop:停止执行 -
export:将本地make的值输出到全局
##类型判断
-
isnumber <value>:返回value是否是数字 -
isword <value>:返回value是否是字 -
islist <value>:返回value是否是表 -
isbool <value>:返回value是否是布尔量全是word,如果是word或者bool再返回true
-
isempty <word|list>: 返回word或list是否是空
##数值计算
-
random <number>:返回[0,number)的一个随机数 -
sqrt <number>:返回number的平方根 -
int <number>: floor the int/*今年不做表达式计算
##表达式计算
允许使用以下运算符对数字进行计算:
+-*/%()为了方便识别,解释器的实现可以要求表达式的外面有括号包围。
*/
第二次做到这里
##字表处理
word <word> <word|number|bool>:将两个word合并为一个word,第二个值可以是word、number或boolif <bool> <list1> <list2>:如果bool为真,则执行list1,否则执行list2。list均可以为空表sentence <value1> <value2>:将value1和value2合并成一个表,两个值的元素并列,value1的在value2的前面list <value1> <value2>:将两个值合并为一个表,如果值为表,则不打开这个表join <list> <value>:将value作为list的最后一个元素加入到list中(如果value是表,则整个value成为表的最后一个元素)first <word|list>:返回word的第一个字符,或list的第一个元素last <word|list>:返回word的最后一个字符,list的最后一个元素butfirst <word|list>:返回除第一个元素外剩下的表,或除第一个字符外剩下的字butlast <word|list>:返回除最后一个元素外剩下的表,或除最后一个字符外剩下的字
##其他操作
wait <number>:等待number个mssave <word>:保存当前命名空间在word文件中load <word>:从word文件中装载内容,加入当前命名空间erall:清除当前命名空间的全部内容poall:列出当前命名空间的全部名字
系统提供了一些常用的量,或可以由其他操作实现但是常用的操作,作为固有的名字。这些名字是可以被删除(erase)的。
pi:3.14159run <list>:运行list中的代码