定义的测量功能,操作员,我想定义一个操作l_op : A list * A list -> A list
,其实施需要另算op : A * A -> A
。鉴于a0: A
,虽然所有a1 : A
op a0 a1
总是返回结果为A
,对于一些a1
结果使得更有意义比其他a1
。OCaml中
直观l_op al0 al1
需要的策略匹配,其中发现的一个al1
有意义元件,关于op
,对于al0
每个元素。然后op
的结果列表是l_op
的结果。
所以我需要的意思措施。
一种可能的选择是,一个功能measure: A * A * A -> int
可以定义。例如,measure a0 a1 (op a0 a1)
给出从1到10的整数,它表示op a0 a1
是如何有意义的。然后在l_op al0 al1
的实施,为al0
每个a0
,我能找到a1
这样measure a0 a1 (op a0 a1) >= measure a0 a1' (op a0 a1') for all a1' in al1
。然后,我删除了两个列表a0
和a1
,并匹配两个列表的其余部分...
另一种选择是,我改变一点点op
到op : A * A -> A * int
其中整数代表当前操作如何有意义。然后在执行l_op al0 al1
,对于a0
的每个al0
,我可以找到a1
这样的for all a1' in al1, m1 >= m1' where (_, m1), (_, m1') = op a0 a1, op a0 a1'
。
第二选择的一个优点是,我们可以节省一些代码,因为我们可以计算测量,而这样做op a0 a1
。缺点是我发现签名op : A * A -> A * int
比op : A * A -> A
好看。
所以我的问题是:
1)没有为这种测量功能(它首先h
可能)的常规词,但我已经忘记了,会有人提醒?
2)你认为int
是一个很好的类型测量?也许我们可以为此定义一种类型......最传统的方式是什么?
3)我上面提到哪个选择更好?或者有没有人有更好的主意?