为什么大多数语言似乎只从逻辑的角度展示了相当基本的控制结构?像If ...那么,Else ...,循环,每个,switch语句等等。从逻辑的角度来看,标准列表看起来相当基本。
为什么逻辑句法糖的方式不多?也许类似于命题引擎,您可以在其中提供一系列前提或函数,这些前提或函数返回复杂的自引用相互依赖的函数和结果。你可以将一系列复杂条件链接在一起的东西,但是代码的表现方式简单明了。
前提1
前提2当且仅当前提1
前提3
前提4,如前提2和前提3
前提5当且仅当前提4
等...
结论
我意识到这种逻辑可以在函数和/或嵌套条件语句中构造。但是为什么通常没有更多的语法选项来构造这些逻辑命题而不会导致看起来很难看的条件语句很难读取和调试?
我们通常在主流编程语言中看到的各种控制结构是否有解释?是否有您希望直接支持语言语法的特定控件结构?这会给语言增加不必要的复杂性吗?
答案 0 :(得分:11)
你看过Prolog了吗? Prolog程序基本上是一组规则,变成一个大的评估引擎。
根据我个人的经验,Prolog有点太奇怪了,我实际上更喜欢ifs,whiles等,但YMMV。
答案 1 :(得分:5)
布尔代数并不困难,并为您能想到的任何条件提供解决方案,以及无数其他变体。
您可能还要求“常用”算术表达式的特殊语法。谁说什么是常用的?你在哪里停止添加特殊情况语法?
增加语言解析器的复杂性并不比使用构造表达式语法更好,并且通过定义函数结合可扩展性。
答案 2 :(得分:2)
自从我在大学的逻辑课以来已经很长时间了,但我猜它是将它们写入语言的困难与使用它们的频率的混合。我不能说我曾经有过对它们的需求(我不记得)。对于那些你需要某些东西的时代,语言设计师可能认为你可以使用基本结构自己计算逻辑。
尽管我只是猜测。
答案 3 :(得分:1)
由于大多数编程语言都没有为用户提供足够的工具来实现它们,因此对于实现者而言,它并不是一个足够重要的功能,它可以作为扩展提供,并且不需要足够的或足够的使用来添加符合标准。
如果您真的需要它,请使用提供它的语言,或提供实现它的工具(例如,lisp宏)。
答案 4 :(得分:1)
听起来好像是在描述rules engine。
答案 5 :(得分:1)
我们使用的基本控制算法反映了处理器可以有效执行的操作。基本上,这归结为简单的测试和分支。
这似乎对您有所限制,但许多人不喜欢编写一个需要数百或数千(或数百万)个处理器周期才能完成的简单代码。在这些人中有系统软件人员,他们编写操作系统和编译器之类的东西。当然,大多数编译器都会反映他们自己作家的担忧。
答案 6 :(得分:1)
它涉及对原子性的关注。如果你能用更简单的结构Y,Z表示A,B,C,D,为什么不简单地不提供A,B,C,D而是提供Y,Z呢?
现有语言反映了原子性和可用性之间60年的紧张关系。现代的方法是“小语言,大型图书馆”。 (C#,Java,C ++等)。
答案 7 :(得分:0)
因为计算机是二进制的,所有决定必须归结为1/0,是/否,真/假等。
为了提高效率,语言结构必须反映这一点。
答案 8 :(得分:0)
最终,您的所有代码都会转到一次执行一条指令的微代码。直到微代码和随附的CPU可以描述更丰富多彩的东西,我们才会使用非常简单的语言。