2009-08-25 78 views
2

为什么大多数语言似乎只从逻辑的角度出现相当基本的控制结构?像If ...那样的东西,Else ...,循环,对于每一个,switch语句等等。从逻辑的角度来看,标准列表看起来相当基本。为什么大多数编程语言中没有更多的控制结构?

为什么在逻辑语法糖方面没有太多的东西?也许像命题引擎那样,你可以提供一系列前提或函数来返回复杂的自引用相互依赖函数和结果。有些东西可以将一系列复杂的条件链接在一起,但代码的读取方式很简单明了。

前提1

前提2当且仅当前提1

前提3

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

前提5当且仅当前提4

等...

结论

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

是否有我们通常在主流编程语言中看到的控制结构类型的解释?是否有特定的控制结构可以直接支持语言的语法?这是否会增加语言的不必要的复杂性?

回答

11

你看了一个Prolog? Prolog程序基本上是一套变成一个大的评估引擎的规则。

从我个人的经验看,Prolog有点太奇怪了,我更喜欢ifs,whiles等等,但是YMMV。

+0

我听说过它,但没有做任何事情。将不得不探索它。 – 2009-08-25 17:49:47

2

自从我在大学的逻辑课上已经很长时间了,但我猜想这是将它们写入语言与使用它们的频率的混合。我不能说我曾经需要他们(我不记得)。对于那些你需要某种语言的人来说,语言设计师可能会认为你可以使用基本结构来自己编写逻辑。

只是我疯狂的猜测。

5

布尔代数并不困难,并提供了一个解决方案,你可以想到的任何条件,加上无数的其他变体。

你可能会问“常用”算术表达式的特殊语法。谁说什么是常用的资格?你在哪里停止添加特殊的语法?

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

+0

这正是为什么。问题中列出的“复杂条件列表”可以用布尔代数的方式很容易地表达出来。在几乎任何环境下做一个评估“引擎”(将价值与条件绑定在一起的东西)都是非常微不足道的。 – Quintus 2009-08-25 17:29:07

+0

我想我同意。但我想知道是否有逻辑模式不容易在布尔代数中实现。我的例子无疑是简单的。我想我需要打开旧的大学逻辑书来拿出一个例子。但是你是对的,因为这个例子可能太难以执行了。 – 2009-08-25 17:48:56

+0

听起来像你正在寻找一个问题。你还没有给出一个这样的例子什么时候会有用的例子。 – 2009-08-25 19:47:44

0

因为计算机是二进制的,所有决定必须降下来的1/0,是/否,真/假等

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

+0

100111? 1 1011 11011 10. – harpo 2009-08-25 17:18:11

+0

不知道为什么这是downvoted? – 2009-08-25 17:23:49

0

最终,所有的代码下降到在一次执行一条指令的微代码。在微代码和伴随的CPU可以描述更加丰富多彩的东西之前,我们坚持使用一种非常通俗的语言。

+1

但是,您的编译器总是可以将复杂/高级语句编译成适合处理器的表单 - 毕竟这是它工作的一部分。 CPU也不能“理解”对象,类等东西,但编译器可以将这些高级结构转换为处理器理解的更简单,低级的指令。 – mipadi 2009-08-25 17:31:30

+0

-1回答是错的,+1给mipadi说为什么 – naiad 2011-06-02 09:05:22

1

因为大多数编程语言不提供足够的工具,为用户实现它们,它不被视为一个重要的功能足以为实施者提供尽可能的延伸,它是不够的需要还是足够使用的是添加到标准中。

如果你真的想要它,使用它提供,或提供的工具来实现它的语言(例如,口齿不清宏)。

1

这听起来好像你是描述一个rules engine

+0

是的,我认为是。感谢您的链接。 – 2009-08-25 17:51:27

1

我们使用的基本控制算法镜像什么处理器可以有效地做。基本上,这可以归结为简单的测试和分支。

这似乎限制了你,但很多人不喜欢写的代码看起来简单的线条,需要处理器周期的数百或数千(或上百万)来完成的想法。这些人中有系统软件人员,他们写的是操作系统和编译器等。当然,大多数编译器都会反映他们自己作者的担忧。

1

它涉及对原子性的关注。如果你可以用简单的结构Y,Z来表示A,B,C,D,为什么不简单地不提供A,B,C,D而是提供Y,Z呢?

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

+0

是真的。虽然:'goto' – naiad 2011-06-02 09:06:06

相关问题