私は次の再帰関数を持っています:
fun tester (f:'a -> 'b, tl:(string * 'a * 'b) list) =
case tl of
[] => []
| (t, c, e)::rest =>
let val tr = f (c)
in
if tr <> (e)
then ((t), (e), tr)::(tester (f, rest))
else tester (f, rest)
end;
ロードすると、「エラー:演算子とオペランドが一致しません[UBOUND一致]」が表示されます。
lec1test.sml:17.5-19.26 Error: operator and operand don't agree [UBOUND match]
operator domain: ''Z * ''Z
operand: 'b * 'Y
in expression:
tr <> e
uncaught exception Error
raised at: ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
../compiler/TopLevel/interact/evalloop.sml:44.55
../compiler/TopLevel/interact/evalloop.sml:296.17-296.20
trの一般的なバインディングに何かがあると思いますが、なぜそれが問題になるのかわかりません。tr
からの関数の値に割り当てています。これは。f
を返します'b
。次に、結果をタプルの最後の値と比較します。これもタイプ'b
です。誰かがこれが私にエラーを与えている理由を説明できますか?