结构化编程语言通常有一些控制结构,例如 while , if , for , do , switch , break , 和 continue用于在源代码中表达高级结构。

然而,多年来提出的许多其他控制结构尚未进入现代编程语言。例如,在 Knuth 的论文“Structured Programming with Go To Statements”中,第 275 页,他引用了一个看起来像是异常处理的精简版的控制结构:

loop until event1 or event2 or ... eventN 
   /* ... */ 
   leave with event1; 
   /* ... */ 
repeat; 
then event1 -> /* ... code if event1 occurred ... */ 
     event2 -> /* ... code if event2 occurred ... */ 
     /* ... */ 
     eventN -> /* ... code if eventN occurred ... */ 
fi; 

这似乎是一个有用的结构,但我还没有看到任何语言实际上将它实现为标准异常处理的特例。

类似地,Edsger Dijkstra 经常使用一种控制结构,在这种结构中,根据一组可能为真的条件,非确定性地执行多段代码中的一段。你可以看到这个 on page 10 of his paper on smoothsort ,在其他地方。示例代码可能如下所示:
do 
    /* Either of these may be chosen if x == 5 */ 
    if x <= 5 then y = 5; 
    if x >= 5 then y = 137;  
od; 

我知道在历史上 C 影响了许多现代语言,如 C++、C# 和 Java,我们今天使用的许多控制结构都是基于 C 提供的小集合。然而, as evidenced by this other SO question ,我们程序员喜欢考虑我们希望拥有但许多编程语言不支持的替代控制结构。

我的问题是 - 当今使用的通用语言是否支持与我上面提到的 C 样式控制结构完全不同的控制结构? 这样的控制结构不必是无法使用标准 C 结构表示的东西——几乎任何东西都可以这样编码——但理想情况下,我想要一个可以让你处理某些编程任务的例子与 C 模型所允许的完全不同的方式。

不,“函数式编程”并不是真正的控制结构。

请您参考如下方法:

  • 因为 Haskell 是 lazy ,每个函数调用本质上都是一个控制结构。
  • Pattern-matching在 ML 派生语言中,将分支、变量绑定(bind)和解构对象合并到一个控制结构中。
  • Common Lisp 的 conditions就像可以重新启动的异常。
  • Scheme等语言支持continuations它使您可以随时暂停和恢复或重新启动程序。

  • 评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!