【问题标题】:Is there a SHOULD (or other modal verb) constructs in any programming languages?在任何编程语言中是否存在应该(或其他情态动词)结构?
【发布时间】:2009-02-17 07:31:56
【问题描述】:

据我所知,我从来没有遇到过计算机语言中的 应该 构造,但话说回来,与那里的数百种语言相比,我不知道那么多语言。

AnywaysSHOULD 等情态动词在自然语言中很常见,在编写文档和具有法律约束力的合同时,它们的含义非常清楚,因此它们并不是真正的灰色术语,理论上可以用编程术语表达(我猜)。

例如一个ASSERT,在某种意义上支持一个MUST结构。

有这类事情的实际例子吗?有没有关于它的研究? 我猜测一些基于规则的系统,也许模糊逻辑算法就是这样工作的。

【问题讨论】:

    标签: language-agnostic computer-science


    【解决方案1】:

    我认为try 是“应该”,catch 和finally 是“以防万一”

    【讨论】:

    • 有趣,我也在考虑同样的事情,但想知道我是否只是妄想:)
    【解决方案2】:

    should在自然语言中的确切含义也不明确。当您说“轮子应该适合行”时,这究竟是什么意思?它可能与 must 的含义相同,但在构造中没有任何意义。否则,您需要有多大的信心才能满足这一点?轮子不合适怎么办?

    在你所指的意义上,有一些等价物,虽然我不知道用应该这个词来表示它们的语言:

    测试/断言

    ASSERT 通常是语言指令、宏或测试库函数。在ASSERT 对应于必须的意义上,一些语言和测试框架为“警告断言”定义宏,如果检查失败但不会退出或测试失败,则会发出警告消息 - 即将对应于应该。

    异常处理

    在某些方面,您可以将抛出的异常视为类似物 - 如果捕获到异常,则程序可以处理某些情况应该。但有时异常描述了某些事情的失败,因为它必须让程序工作,在这种情况下,异常不会被捕获或处理程序将使程序优雅地失败。然而,情况并非总是如此 - 有时会执行代码来测试 可能 或什至 不太可能 的东西,并且捕获到一个异常,期望它通常会被扔掉。

    约束逻辑

    must 和 should 在各种正式的自然语言文档中的一个常见含义是在约束方面 - must 指定一个约束,你总是必须满足,如果你不能满足,那么你的状态是不兼容的,而 应该 意味着在给定状态和隐含的约束的情况下,你将始终满足约束如果可能 必须,但如果不可能仍然有效。在非正式约束逻辑中,当上下文中存在“外部约束”时会发生这种情况 - 因此,只有在了解上下文,并且在给定上下文的情况下,您可能还能够满足“应该约束”的不同子集,但不能同时满足。出于这个原因,一些约束逻辑规范语言(您是否称它们为“编程语言”取决于您的定义)具有约束排序的概念 - 第一级约束对应于必须,下一级对应于应该,并且如果可能的话,必须满足一个约束,因为它外部的所有约束(在以前的级别中),即使这与下一个级别中的一些约束冲突,这些约束将不会被满足。

    【讨论】:

    • 非常好的答案,你有没有引用或纯粹是你的?
    • 这里没有我的想法,除了解释和糟糕的解释......显然,约束逻辑部分是基于我在不同时间了解的主题 - 我没有发明它。没有直接引用 - 但如果您有兴趣,网络和书籍都充满了资源。
    • +1:约束逻辑很好。我在想 SQL 中的 NULL 可能意味着“应该有一个值,但它当前缺失”,这可能导致 COALESCE(),这类似于 TRY CATCH FINALLY。但是 NULL 在关系上是相反的:)
    【解决方案3】:

    @Simon 也许 Try/finally 最接近应该。 Try 中的任何内容都应该运行,但并非总是如此。 Web 服务应该打开套接字,但如果没有,我们不在乎。

    【讨论】:

    • 也许,是的。但是我认为说尝试打开文件并读取行捕获 io 错误打印消息最终关闭文件同样有效。这就像说文件应该存在并包含某些内容,但是有几件事可能会出错,因此请单独处理。两者都有效。
    【解决方案4】:

    这种模式在RSpec - dsl 中用于以行为驱动的方式构建测试。

    【讨论】:

    • 谢谢 没听说过这个,它很有趣,也是我正在寻找的那种东西。
    【解决方案5】:

    “should”、“may”、“might”等情态动词可能会引起混淆,因此RFC 2119 给出了一个定义,将所有鼻子都指向同一个方向:

    SHOULD   This word, or the adjective "RECOMMENDED", mean that there
    may exist valid reasons in particular circumstances to ignore a
    particular item, but the full implications must be understood and
    carefully weighed before choosing a different course.
    

    根据这个定义,它应该(不是双关语)清楚地表明它是用于规范,而不是程序代码,您希望事情具有确定性。至少我会。不过,我可以想象它可以在 AI 中使用。

    【讨论】:

    • 感谢官方对这个词的立场,我想知道这样的事情是否存在
    【解决方案6】:

    Well 应该可以在 prolog 类型语言中找到,作为更软的推理?即逻辑上的结果应该是 x 但可能不是。你可以说结果可能是 x 但不是很明确?

    【讨论】:

      【解决方案7】:

      如果结果不是它应该的,你期望程序的行为是什么?在 ASSERT 的情况下,它是一个异常(AssertException 或类似的)。程序应该抛出异常还是忽略结果?对我来说,两者之间似乎没有任何东西。结果是否被接受。

      否则,您应该指定您期望的行为。 :-)

      回到断言:如果断言失败,则抛出异常。这取决于你如何处理这个例外。例如,在 java/C# 中,您可以捕获它,然后做任何您想做的事情,因此您可以定义断言是否具有 MUST 或 SHOULD 语义。

      【讨论】:

      • 断言的目的不应该是强制执行吗?当然,实际的底层异常系统也可以处理。但是断言的想法是暗示不变量(==必须?)
      • 多思考你的观点,如果/ELSE 可能与应该/OR 相同...
      • 断言:嗯......你可能是对的。 java中的本机assert构造当然是针对您所说的。我还将本机断言与 JUnit 中的断言函数混合在一起(尽管它们也可能被指定为 MUST 构造)。
      • 我仍然对您期望在应该构造中的什么行为感兴趣?
      【解决方案8】:

      嗯,Java2K 有类似的概念。它应该做它被告知的事情......

      SCNR。

      【讨论】:

        猜你喜欢
        • 2013-03-10
        • 1970-01-01
        • 2014-11-20
        • 2016-02-25
        • 1970-01-01
        • 2010-10-06
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        相关资源
        最近更新 更多