在 Haskell 中定义一个函数的 2 个或多个方程可以共享相同的 where / let 块吗?
让我举一个人为的例子来说明这个问题。
首先,考虑以下代码作为起点:
someFunction v1 v2 v3 = difference ^ v3
where
difference = v1 - v2
到目前为止,一切都很好。但是,假设我需要处理“另一种情况”,如果 v3 == 99 并且差异 < 4(完全任意,但假设这些是我的要求),我需要返回零。
我的第一个想法是这样做:
someFunction v1 v2 99 | difference < 4 = 0
someFunction v1 v2 v3 = difference ^ v3
where
difference = v1 - v2
但是,这是行不通的,因为 someFunction 的第一个方程和 someFunction 的第二个方程并不共享相同的 where 块。在这个人为的示例中,这没什么大不了的,因为 where 块中只有一个变量(“差异”)。但在现实世界的情况下,可能存在大量变量,重复它们是不可接受的。
我已经知道如何通过使用守卫并且只有一个方程来解决这个问题。问题是,有没有办法让多个方程共享相同的 where / let 子句?因为有多个具有不同模式的方程似乎是可取的,而不是被迫只有一个方程有很多守卫。