有谁知道名为警卫的构造名称的来源是什么?
func x
| cond1 -> expr1
...
| condN -> exprN
维基百科文章 Guard_(computer_science)给出了一些历史观点,但缺乏对名称来自何处的解释(它只是提到SASL是第一个使用该名称的人之一)。
到目前为止,我发现了对Edsger Dijkstra及其守卫指挥语言的引用。他是第一个使用“守卫”一词吗?
答案 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的守卫是一个基本的&对结构化编程的有影响力的贡献。