在编写某些 bool 表达式时,我必须过于冗长,至少对于我使用过的所有语言来说是如此,我想知道是否有任何语言可以让您编写得更简洁?
它的运行方式是这样的:
我想知道我是否有一个可以是 A
、B
、C
的 Thing
,或D
。
我想看看 Thing
是 A
还是 B
。
我表达这一点的逻辑方式是
//1: true if Thing is an A or a B
Thing == (A || B)
然而我所知道的所有语言都希望它被写成
//2: true if Thing is an A or a B
Thing == A || Thing == B
是否有支持 1 的语言?对我来说这似乎没有问题,除非 Thing
是 bool 值。
最佳答案
是的。图标确实如此。
作为一个简单的例子,这里是如何获得所有小于 1000 且能被 3 或 5 整除的数字的总和(欧拉计划的第一个问题)。
procedure main ()
local result
local n
result := 0
every n := 1 to 999 do
if n % (3 | 5) == 0 then
result +:= n
write (result)
end
请注意 n % (3 | 5) == 0
表达式。我对精确的语义有点模糊,但是在 Icon 中, bool 值的概念与其他语言不同。每个表达式都是一个生成器,它可能会通过(生成一个值)或失败。当在 if
表达式中使用时,生成器将继续迭代,直到它通过或耗尽自身。在本例中,n % (3 | 5) == 0
是一个生成器,它使用另一个生成器 (3 | 5)
来测试 n
> 可以被 3 或 5 整除。(从技术角度来说,这甚至不是语法糖。)
同样,在 Python 中(受 Icon 的影响),您可以使用 in
语句来测试多个元素的相等性。不过它比 Icon 稍弱(例如,您无法直接翻译上面的模比较)。在您的情况下,您可以编写 Thing in (A, B)
,它会准确地转换为您想要的内容。
关于language-features - 支持 bool 语法糖的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455222/