0
fun can_move    0 0 0 nil = false
|   can_move    limit_down V 0 a  = true
|   can_move    limit_down V count a =  if  ((V-limit_down)>hd a) then false else               can_move limit_down V (count-1) tl a ;

ちょっとこれは私のコードです V-limit_down の値が int リストの数値よりも低いかどうかを確認したいだけです a.a リストから確認したい引数の数は V/10 です。たとえば、20 V の場合、リストの最初の 2 つの引数を確認します。なぜこのエラーが発生するのですか?

can_move.sml:1.6-3.114 Error:right-hand-side of clause doesn't agree with function     result type
[tycon mismatch] 
expression: int -> int -> int list -> bool
result type: int -> int -> (Z' list -> 'Z list) -> int list -> bool
in declaration:

can_move (fn arg =) (fn <pat> => <exp>))
4

1 に答える 1

2

パターンマッチの最後の右側の括弧を忘れたようです。再帰呼び出しcan_move limit_down V (count-1) tl aでは、最後の引数が。であることに注意してくださいtl a。通常、パーサーはこれが関数適用であることを理解できます。残念ながら、ここにあるように、アプリケーションの結果がさらに別のアプリケーションの一部である場合はあいまいです。

解決策は、呼び出しを括弧で囲むことですcan_move limit_down V (count-1) (tl a)

于 2012-05-31T15:36:39.780 に答える