Haskell 为什么叫卫兵';警卫';?

Haskell 为什么叫卫兵';警卫';?,haskell,functional-programming,guard-statement,Haskell,Functional Programming,Guard Statement,有人知道名为守卫的构造的名称的来源吗 func x | cond1 -> expr1 ... | condN -> exprN 维基百科的文章给出了一些历史观点,但没有解释这个名字的来源(它只是提到SASL是最早使用这个名字的人之一) 到目前为止,我找到了有关埃德斯格·迪克斯特拉和他谨慎的指挥语言的参考资料。他是第一个使用“警卫”这个词的吗?我认为,问术语从何而来是毫无意义的。(例如,为什么Haskell有“类型”和“种类”,而数学有“排序”?)维基百科

有人知道名为守卫的构造的名称的来源吗

func x
    | cond1 -> expr1  
    ...
    | condN -> exprN
维基百科的文章给出了一些历史观点,但没有解释这个名字的来源(它只是提到SASL是最早使用这个名字的人之一)


到目前为止,我找到了有关埃德斯格·迪克斯特拉和他谨慎的指挥语言的参考资料。他是第一个使用“警卫”这个词的吗?

我认为,问术语从何而来是毫无意义的。(例如,为什么Haskell有“类型”和“种类”,而数学有“排序”?)维基百科的文章很好

右边写守卫的风格确实反映了数学(维基百科的文章有一个例子)。这可能就是影响迪克斯特拉的原因。Strachey 1967年的“基本概念”中也有同样的数学风格。(他不用“警卫”。)


@Will-Ness与普通的条件句没有太大的区别。因此,最好用一个不同于“条件”的词。模式匹配后会出现防护:

case x of
  (Maybe x') | x' > 0 -> ...
  Nothing {- x' not in scope here -} -> ...
在案例分支中:首先匹配模式,并绑定变量;然后使用变量应用保护


你可以把这个概念扩展到类型层面

是的,这个术语来自Dijkstra


讽刺的是,上面说的“保护代码提供了从子例程的早期退出,并且是对结构化编程的一种常用偏差”,缺乏对保护和结构化编程的基本理解,因为迪克斯特拉的后卫对结构化编程有着重要的贡献,所以这个术语变得非常重要。

后卫决定谁可以进来,谁不进来。因此,条件决定了“开火”一词是否正确。在接近票数的情况下,问题(“Dijkstra是第一个使用“守卫”一词的人吗?”)既不宽泛,也不基于意见。我不确定计算机历史问题是否在这个主题上。我倾向于不这样做,但无论如何,这个问题显然不是关于通用计算硬件和软件的(对于超级用户,可能比这里更离题)。所以我看了看目前为止存在的所有接近票数。不是SASL,KRC。警卫和简单的条件没有太大区别。这些已经在(大部分被忽略的)Plankalkül(尽管维基百科说它影响了Algol 58)。我认为声称某人的好奇心是毫无意义的
(cond((偶数?2)=>(lambda(b)…)(否则…;| b不在这里的范围内|…)
。波塔托,波塔托。:)“没什么不同”=/=“完全一样”——从足够远的地方看,一切都像其他一切。(“嗯,这些强子物体彼此之间没有太大的不同”,一个基于能量的生命体看着一个人和一棵树说…(顺便说一句,@ping在帖子正文中不起作用,只是从评论中)