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
广告

© . All rights reserved.