【发布时间】:2020-10-19 03:16:22
【问题描述】:
在标准 ML 中,一般情况下是否可以使用变量阴影,特别是在模式匹配可接受的情况下?对于这个玩具示例:
case xs of
[] => 0
| x::xs => x + sum xs
下面的风格更好吗?
fun sum(xs) =
case xs of
[] => 0
| x::xs' => x + sum xs'
如果没有阴影,则必须选择不同的名称,这会使代码混乱,尤其是在使用嵌套模式、let 函数绑定和其他语言结构时。
谢谢!
【问题讨论】:
-
结构化代码很常见,因此它不使用嵌套模式和复杂的 let 构造,如果它变得笨拙,但我认为大多数人会选择
y::ys而不是您的任何建议。 -
我认为这个问题有一个明确的答案——不,这不是很好的风格。但是,对此的解决方案是相当主观的,并且通常根据具体情况进行选择。此外,在总体方案中,代码库中还有比一些阴影变量或一些
'-suffixed 更重要的东西(如果它们用于具有明确职责的小函数,我可以接受不好的变量命名)。 -
我个人很喜欢它,当它不再有效时,通过引用阴影变量来出错是不可能的。我也喜欢它,因为它让我避免了我觉得非常混乱的带底漆的名字。 (虽然我不是 MLer)
标签: functional-programming sml ml