language-features - 支持 bool 语法糖的语言

标签 language-features boolean-logic syntactic-sugar

在编写某些 bool 表达式时,我必须过于冗长,至少对于我使用过的所有语言来说是如此,我想知道是否有任何语言可以让您编写得更简洁?

它的运行方式是这样的:

我想知道我是否有一个可以是 ABCThing ,或D

我想看看 ThingA 还是 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/

相关文章:

c# - 这是哪个 "C# Experimental language feature"?

c# - string.Format() 参数

scala - Scala 的 apply() 方法魔法是如何工作的?

language-agnostic - 你最喜欢的语言如何处理深度递归?

scripting - 游戏脚本需要哪些语言功能?

algorithm - 出于缓存原因规范化 bool 表达式。有没有比真值表更有效的方法?

python - 测试所有 N 个变量是否不同

c - C 中的正则表达式 : Match pattern with a string in the middle

Python-根据先前的函数退出状态调用函数的最佳方式?

c++ - 大多数 C++ 风格的检查值是否属于某个静态集的方法