Lolcode - 运算符
运算符在对变量执行各种操作中起着重要作用。本章介绍 LOLCODE 中的各种运算符及其用法。
运算符
数学运算符依赖于前缀表示法,即出现在操作数之前的表示法。当所有运算符都有已知数量的参数或操作数时,不需要分组标记。在运算符没有固定参数或操作数的情况下,操作以 MKAY 结束。
如果 MKAY 与语句的结尾重合,则可能不会使用。在这种情况下,应使用 EOL 关键字。要使用一元数学运算符,请使用以下语法:
<operator> <expression>
AN 关键字可以可选地用于分隔参数,并在多个操作数上应用单个操作,因此二元运算符表达式具有以下语法:
<operator> <expression1> AN <expression2>
任何包含具有无限多个参数的运算符的表达式都可以用以下语法表示:
<operator> <expression1> [[AN <expression2>] AN <expression3> ...] MKAY
数学运算
以下是 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
上述中的 <a> 和 <b> 可以是唯一的表达式,因此数学运算符可以无限嵌套和分组。
如果存在两个 NUMBR,则数学运算将参数视为整数数学运算,但如果任一表达式为 NUMBAR,则运算将视为浮点运算。
示例
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。
如果任何参数无法安全地内部转换为数值类型,则会发生错误。
布尔运算
布尔运算符应用于可能为真或假的值。作用于 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.
请注意,如果表达式语法中的 <m> 和 <n> 不是 TROOF 值,则会自动转换为 TROOF 值。
比较
当您想要在 LOLCODE 中比较两个或多个操作数时,您可以通过以下任何一种方法进行:
方法 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
方法 2
您可以比较两个值是否都是 NUMBR 类型。请记住,如果任一值为 NUMBAR,则将其视为浮点值进行比较。
方法 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>
示例
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
KTHXBY
执行给定代码时,您可以看到以下输出:
sh- 4.3$ lci main.lo TRUE
值的连接
LOLCODE 允许您使用 SMOOSH…MKAY 运算符显式连接无限多个 YARN。对于连接,可以使用 AN 运算符分隔多个参数。
示例
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>
其中,<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>
示例
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