1

このコード:

validate :: Matrix-> Bool
validate x: [] = length x
validate x: xs = (length x == lenght.head $ xs) == (validate tail xs)

このエラーが発生します:

Parse error in pattern: validate

なんで?

私の目的は、行列が正しいパターンにある場合、つまりすべての行の列数が等しい場合、またはその逆の場合に true を返すことです。

4

1 に答える 1

13

関数の適用は、 などの演算子よりも優先され:ます。したがって、コンパイラは次のように考えます。

validate x:[]

意味:

(validate x):[] = ..

これはもちろん間違っています。

したがって、括弧を使用してこれを明示的に明確にする必要があります。

validate (x:[]) = ..

2 行目も同様です。

validate (x:xs) = ..

また、関数アプリケーションで括弧を指定しない場合は、連想のままであると見なされるため、次のようになります。

validate tail xs

以下と同じです:

(validate tail) xs

ではない:

validate (tail xs)

一般的な方法は、次のように$演算子を使用することです。

validate $ tail xs
于 2012-10-08T12:16:28.497 に答える