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 中比较两个或多个操作数时,可以使用以下任意方法来执行此操作 -
方法一
您可以使用相等运算符比较两个二进制操作数。语法如下所示 -
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
您可以比较这两个值是否都是 NUMBRs 类型。请记住,如果其中一个值是 NUMBAR,那么它们将作为浮点值进行比较。
方法三
您还可以使用最小值和最大值运算符执行比较。语法如下所示 -
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