【问题标题】:Why are there not more control structures in most programming languages?为什么大多数编程语言中没有更多的控制结构?
【发布时间】:2009-08-25 16:59:25
【问题描述】:

为什么从逻辑的角度来看,大多数语言似乎只表现出相当基本的控制结构?诸如 If ... then、Else...、循环、For each、switch 语句等之类的东西。从逻辑的角度来看,标准列表似乎相当基本。

为什么没有更多的逻辑语法糖?也许类似于命题引擎,您可以在其中提供一组前提或函数,这些前提或函数返回复杂的自引用相互依赖的函数和结果。您可以将一系列复杂的条件链接在一起,但以一种易于在代码中阅读的方式表示。

前提1

前提2当且仅当前提1

前提 3

前提 4 如果前提 2 和前提 3

前提 5 当且仅当前提 4

等等……

结论

我意识到这种逻辑 this 可以在函数和/或嵌套条件语句中构建。但是,为什么通常没有更多的语法选项来构建这些逻辑命题而不会导致难以阅读和调试的毛茸茸的条件语句呢?

对于我们通常在主流编程语言中看到的控制结构种类有解释吗?您是否希望看到某种语言的语法直接支持特定的控制结构?这是否只是给语言增加了不必要的复杂性?

【问题讨论】:

    标签: programming-languages syntax logic


    【解决方案1】:

    你看过Prolog吗? Prolog 程序基本上是一组规则,这些规则变成了一个大型评估引擎。

    根据我的个人经验,Prolog 有点太奇怪了,我实际上更喜欢 ifs、whiles 等,但 YMMV。

    【讨论】:

    • 我听说过,但没有做任何事情。将不得不探索它。
    【解决方案2】:

    布尔代数并不难,它为您能想到的任何条件以及无数其他变体提供了解决方案。

    您不妨要求“常用”算术表达式的特殊语法。谁来说什么是常用的?你在哪里停止添加特殊情况的语法?

    增加语言解析器的复杂性不如使用构造表达式语法,并通过定义函数结合可扩展性。

    【讨论】:

    • 这正是原因。问题中列出的“复杂条件数组”可以很容易地用布尔代数表示。制作评估“引擎”(将值绑定到条件的东西)在几乎任何环境中都非常简单。
    • 我想我同意。但我想知道是否存在在布尔代数中不容易实现的逻辑模式。我的例子很简单。我想我需要打开旧的大学逻辑书才能提出一个例子。但你是对的,这个例子可能太少了,无法实现。
    • 听起来您正在寻找问题。你还没有给出这样的例子什么时候有用。
    【解决方案3】:

    自从我在大学上逻辑课以来已经有很长时间了,但我想这是将它们写成语言的困难与使用它们的频率的混合体。我不能说我曾经需要它们(我不记得了)。对于那些你需要类似东西的时候,语言设计者可能认为你可以只使用基本结构自己制定逻辑。

    只是我的猜测。

    【讨论】:

      【解决方案4】:

      因为大多数编程语言都没有为用户提供足够的工具来实现它们,所以它并不被视为实现者作为扩展提供的足够重要的功能,而且它的需求和使用量都不够,无法添加符合标准。

      如果您真的需要它,请使用提供它的语言,或提供实现它的工具(例如,lisp 宏)。

      【讨论】:

        【解决方案5】:

        听起来好像您在描述rules engine

        【讨论】:

        • 是的,我想是的。感谢您的链接。
        【解决方案6】:

        我们使用的基本控制算法反映了处理器可以高效执行的操作。基本上,这归结为简单的测试和分支。

        这对您来说似乎很有限,但很多人不喜欢编写需要数百或数千(或数百万)个处理器周期才能完成的看似简单的代码行。这些人中有系统软件人员,他们编写诸如操作系统和编译器之类的东西。自然,大多数编译器都会反映他们自己作者的担忧。

        【讨论】:

          【解决方案7】:

          这与对原子性的关注有关。如果您可以用更简单的结构 Y、Z 表示 A、B、C、D,为什么不简单地不提供 A、B、C、D 而是提供 Y、Z?

          现有语言反映了 60 年来原子性和可用性之间的紧张关系。现代方法是“小语言,大图书馆”。 (C#、Java、C++ 等)。

          【讨论】:

            【解决方案8】:

            因为计算机是二进制的,所以所有决定都必须归结为 1/0、是/否、真/假等。

            为了高效,语言结构必须反映这一点。

            【讨论】:

              【解决方案9】:

              最终,您的所有代码都会归结为一次执行一条指令的微代码。在微代码和随附的 CPU 可以描述更丰富多彩的东西之前,我们一直被一种非常简单的语言所困。

              【讨论】:

              • 但是您的编译器总是可以采用复杂/高级语句并将其编译成适合处理器的形式——毕竟这是它工作的一部分。 CPU 也不会“理解”对象、类等内容,但编译器可以将这些高级构造适当地转换为处理器能够理解的更简单的低级指令。
              • -1 表示完全错误,+1 表示 mipadi 表示原因
              猜你喜欢
              • 1970-01-01
              • 2011-02-20
              • 2013-08-19
              • 1970-01-01
              • 1970-01-01
              • 2010-11-04
              • 2019-09-17
              • 2020-11-01
              相关资源
              最近更新 更多