有谁知道名为guards的结构名称的由来吗?
func x
| cond1 -> expr1
...
| condN -> exprN
维基百科文章Guard_(computer_science)给出了一些历史观点,但没有解释名称的来源(它只是提到 SASL 是最早使用该名称的人之一)。
到目前为止,我找到了对 Edsger Dijkstra 和他的 Guarded Command Language 的引用。他是第一个使用“守卫”这个词的吗?
有谁知道名为guards的结构名称的由来吗?
func x
| cond1 -> expr1
...
| condN -> exprN
维基百科文章Guard_(computer_science)给出了一些历史观点,但没有解释名称的来源(它只是提到 SASL 是最早使用该名称的人之一)。
到目前为止,我找到了对 Edsger Dijkstra 和他的 Guarded Command Language 的引用。他是第一个使用“守卫”这个词的吗?
我认为询问术语的来源是没有意义的。(例如,为什么 Haskell 有“类型”和“种类”,而数学有“排序”?)维基百科的文章很好。
右边的写作风格确实反映了数学(维基百科文章有一个例子)。这可能是影响 Dijkstra 的原因。Strachey 1967 年的“基本概念”中也有相同的数学风格。(他不使用“守卫”。)
@Will Ness警卫与普通条件没有太大区别是不对的。所以最好有一个与“条件”不同的词。守卫出现在模式匹配之后:
case x of
(Maybe x') | x' > 0 -> ...
Nothing {- x' not in scope here -} -> ...
在case分支中:先匹配模式,然后绑定变量;然后使用变量应用警卫。
您可以将想法扩展到类型级别https://github.com/AntC2/ghc-proposals/blob/instance-apartness-guards/proposals/0000-instance-apartness-guards.rst
是的,这个词来自 Dijkstra。受保护的命令、非确定性和程序的正式派生 (CACM 1975)
具有讽刺意味的是,维基百科文章 Guard(计算机科学)说“Guard code 提供了子程序的早期退出,并且是结构化编程的常用偏差”,缺乏对守卫和结构化编程的基本认识,因为这个术语变得很重要因为 Dijkstra 的守卫是结构化编程的基本且有影响力的贡献。