为什么警卫被称为“守卫”?

时间:2017-06-23 16:34:14

标签: haskell functional-programming guard-statement

有谁知道名为警卫的构造名称的来源是什么?

func x
    | cond1 -> expr1  
    ...
    | condN -> exprN

维基百科文章 Guard_(computer_science)给出了一些历史观点,但缺乏对名称来自何处的解释(它只是提到SASL是第一个使用该名称的人之一)。

到目前为止,我发现了对Edsger Dijkstra及其守卫指挥语言的引用。他是第一个使用“守卫”一词吗?

2 个答案:

答案 0 :(得分:0)

我认为毫无意义地询问术语的来源。 (例如,为什么Haskell有'类型'种类',而数学有'种类'?)维基百科文章很好。

向右写保护的风格确实反映了数学(维基百科文章有一个例子)。这可能是影响Dijkstra的原因。在1967年的Strachey' Fundamental Concepts'中有相同的数学风格。 (他没有使用"警卫"。)

@Will Ness 警卫与普通条件差别不大不对。所以有一个不同的词而不是" condition"。警卫来自模式匹配:

case x of
  (Maybe x') | x' > 0 -> ...
  Nothing {- x' not in scope here -} -> ...

在案例分支中:首先匹配模式,然后绑定变量;然后使用变量应用警卫。

您可以将想法扩展到类型级别https://github.com/AntC2/ghc-proposals/blob/instance-apartness-guards/proposals/0000-instance-apartness-guards.rst

答案 1 :(得分:0)

是的,这个词来自Dijkstra。 Guarded commands, non-determinacy and formal derivation of programs (CACM 1975)

具有讽刺意味的是,Wikipedia article Guard (computer science)说“守卫代码提供了从子程序的早期退出,并且是结构化编程的常用偏差”,缺乏对守卫的基本认识。结构化编程,因为这个术语变得很重要,因为Dijkstra的守卫是一个基本的&对结构化编程的有影响力的贡献。