定義的測量功能,操作員,我想定義一個操作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)我上面提到哪個選擇更好?或者有沒有人有更好的主意?