有没有更优雅或更好的方法来在 F#/OCaml 中编写交换函数,而不是列出所有可能的情况?
let commutative x y =
match x,y with
a, _ -> val1
|_, a -> val1
|b, _ -> val2
|_, b -> val2
...
|_,z -> |valN
当我写这个问题时,我认为如果没有找到匹配项,可以使函数递归并交换参数。
let rec commutative x y =
match x,y with
a,_ -> val1
|b,_ -> val2
...
|nox,noy -> commutative noy nox
但是,如果我采用这种方法,除非我添加另一个参数,其值指示它是否是第二次调用该函数并返回默认值而不是调用带有交换的函数args 如果是这样的话。
还有其他想法吗?该语言是否提供了一种结构来表达我定义的函数是可交换的这一事实?