我想知道是否有办法做这样的事情(x, y < 0, z)
与y < 0
我的示例中有三种情况y = 0
,y < 0
和其他。
我知道如何用不同的方法实现这个功能,但是 我只是喜欢这种方式,想知道这是否可行。
let rec f = function
| (x, 0, y) -> x
| (x, y < 0, z) -> f (x y z)
| (x, y, z) -> f (z y x)
就是你知道,我在递归调用中删除了元组的复杂性,所以函数现在没有用。
答案 0 :(得分:5)
您可以使用when
关键字在模式后添加条件。有了这个,你可以做你想做的事情:
let rec f = function
| (x, 0, y) -> x
| (x, y, z) when y < 0 -> f (x, y, z)
| (x, y, z) -> f (z, y, x)
这将导致无限递归,因为f (x, y, z)
并未对参数进行任何更改,但我认为您的实际代码中不存在该问题。