4

有谁知道名为guards的结构名称的由来吗?

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

维基百科文章Guard_(computer_science)给出了一些历史观点,但没有解释名称的来源(它只是提到 SASL 是最早使用该名称的人之一)。

到目前为止,我找到了对 Edsger Dijkstra 和他的 Guarded Command Language 的引用。他是第一个使用“守卫”这个词的吗?

4

2 回答 2

0

我认为询问术语的来源是没有意义的。(例如,为什么 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

于 2017-06-23T23:40:57.360 回答
0

是的,这个词来自 Dijkstra。受保护的命令、非确定性和程序的正式派生 (CACM 1975)

具有讽刺意味的是,维基百科文章 Guard(计算机科学)说“Guard code 提供了子程序的早期退出,并且是结构化编程的常用偏差”,缺乏对守卫和结构化编程的基本认识,因为这个术语变得很重要因为 Dijkstra 的守卫是结构化编程的基本且有影响力的贡献。

于 2017-10-22T18:06:27.373 回答