运算符
运算符在对变量执行各种操作方面发挥着重要作用。 本章为您介绍LOLCODE中的各种运算符及其用法。
运算符 (Operators)
数学运算符依赖于前缀表示法,即操作数之前的符号。 当所有运算符都具有已知数量的参数或操作数时,则不需要分组标记。 如果运算符没有固定的参数或操作数,则使用MKAY关闭操作。
如果MKAY与语句的结尾一致,则不能使用MKAY。 在这种情况下,应使用EOL关键字。 要使用一元数学运算符,请使用以下语法 -
<operator> <expression>
AN关键字可以选择用于分隔参数,并对多个操作数应用单个操作,因此二元运算符表达式具有以下语法 -
<operator> <expression1> AN <expression2>
包含具有无限数量参数的运算符的任何表达式都可以使用以下语法表示 -
<operator> <expression1> [[AN <expression2>] AN <expression3> ...] MKAY
Math
以下是LOLCODE中的基本数学运算 -
SUM OF <a> AN <b> BTW This is a plus + operator
DIFF OF <a> AN <n> BTW This is a minus - operator
PRODUKT OF <a> AN <n> BTW This is a multiply operator *
QUOSHUNT OF <a> AN <n> BTW This is a divide operator
MOD OF <a> AN <n> BTW This is a modulo operator
BIGGR OF <a> AN <n> BTW This is a max operator
SMALLR OF <a> AN <n> BTW This is a min operator
和都可以是上面的唯一表达式,因此数学运算符可以无限期地嵌套和分组。
在存在两个NUMBR的情况下,将参数视为整数数学来执行数学,但如果任一表达式为NUMBAR,则操作被视为浮点运算。
例子 (Example)
HAI 1.2
I HAS A m ITZ 4
I HAS A n ITZ 2
VISIBLE SUM OF m AN n BTW +
VISIBLE DIFF OF m AN n BTW -
VISIBLE PRODUKT OF m AN n BTW *
VISIBLE QUOSHUNT OF m AN n BTW /
VISIBLE MOD OF m AN n BTW modulo
VISIBLE BIGGR OF m AN n BTW max
VISIBLE SMALLR OF m AN n BTW min
KTHXBYE
运行它时,上面的代码将产生以下输出 -
sh-
4.3$ lci main.lo
6
2
8
2
0
4
2
重点 -
考虑以下与在LOLCODE中使用数学运算符相关的重要事项 -
如果表达式中的一个或两个参数为YARN,则将它们视为NUMBAR。
如果任何参数无法在内部安全地转换为数字类型,则它将失败并显示错误
Boolean
布尔运算符应用于可能为true或false的值。 在TROOF上工作的布尔运算符如下 -
BOTH OF <m> AN <n> BTW its and operation: WIN if m = WIN and n = WIN
EITHER OF <m> AN <n> BTW its or operation: FAIL iff m = FAIL, n = FAIL
WON OF <m> AN <n> BTW its xor operation: FAIL if m = n
NOT <m> BTW its an unary negation: WIN if m = FAIL
ALL OF <m> AN <n> ... MKAY BTW it will take infinite arguments and apply AND
ANY OF <m> AN <n> ... MKAY BTW it will take infinite arguments and apply OR.
请注意,如果上面的表达式语法中的和不是TROOF值,则会自动转换为TROOF值。
比较(Comparison)
如果要在LOLCODE中比较两个或多个操作数,可以使用以下任何方法执行此操作 -
Method 1
您可以使用相等运算符比较两个二进制操作数。 语法如下所示 -
BOTH SAEM <m> AN <n> BTW this will return WIN if m is equal to n
DIFFRINT <m> AN <n> BTW this will return WIN if m is not equal to n
Method 2
您可以比较两个值是否为NUMBR类型。 请记住,如果其中任何一个值为NUMBAR,则将它们作为浮点值进行比较。
方法3 (Method 3)
您还可以使用最小和最大运算符执行比较。 语法如下所示 -
BOTH SAEM <m> AN BIGGR OF <m> AN <n>
BOTH SAEM <m> AN SMALLR OF <m> AN <n>
DIFFRINT <m> AN SMALLR OF <m> AN <n>
DIFFRINT <m> AN BIGGR OF <m> AN <n>
Example
HAI 1.2
I HAS A VAR11 ITZ 7
BOTH SAEM VAR11 SMALLR OF VAR11 AN 8, O RLY?
YA RLY
VISIBLE "TRUE"
NO WAI
VISIBLE "FALSE"
OIC
KTHXBYE
执行给定代码时,您可以看到以下输出 -
sh-
4.3$ lci main.lo
TRUE
连接价值观
LOLCODE允许您使用SMOOSH ... MKAY运算符显式连接无限数量的YARN。 对于连接,可以使用AN运算符分隔多个参数。
例子 (Example)
HAI 1.2
I HAS A VAR1 ITZ A YARN
VAR1 R "TRUE"
I HAS A VAR2 ITZ A YARN
VAR2 R "ANOTHER TRUE"
I HAS A VAR3 ITZ A YARN
VAR3 R "ONE MORE TRUE"
VISIBLE SMOOSH VAR1 " " VAR3 " " VAR2 MKAY
KTHXBYE
上面给出的代码将在执行时产生以下结果 -
sh-
4.3$ lci main.lo
TRUE ONE MORE TRUE ANOTHER TRUE
类型转换
处理特定类型的运算符可以安全地将一种类型的值隐式转换或转换为其他类型。 如果该值无法安全地转换为其他类型,则会导致错误。
表达式的值可以使用二进制MAEK运算符显式地转换或转换为其他类型。 MAEK运算符的语法是 -
MAEK <expression> A <type>
其中,可以是TROOF,YARN,NUMBR,NUMBAR或NOOB之一。
要显式地将变量强制转换为其他类型,可以使用带有MAEK运算符的正常赋值语句,或者可以使用强制赋值语句,如下所示 -
<Any_variable> IS NOW A <type> BTW this code will be equal to
<Any_variable> R MAEK <variable> A <type>
例子 (Example)
HAI 1.2
I HAS A food ITZ "111.00033"
VISIBLE food
BTW this is how we do type casting
MAEK food A NUMBAR
VISIBLE food
KTHXBYE
以上代码将产生以下输出 -
sh-4.3$ lci main.lo
111.00033
111.00033