行列の転置を計算しようとしている F# の割り当てがあります。簡単ですが、値制限エラーが発生し続け、その理由がわかりません。そこにあるVRエラーの質問の多くを調べましたが、私はまだ暗闇の中にいます. これが私のコードです:
let transpose = function
| [xs ; ys] ->
let rec transpose_helper = function
| [],[] -> []
| x::xs , y::ys -> [x;y] :: transpose_helper (xs,ys)
| _ -> failwith "The matrix is not a square matrix"
transpose_helper(xs,ys)
| _ -> failwith "Incorrectly formatted input"
transpose ([[1;2;3];[2;3;4]]);;
エラーの一部は空のリストが原因であると思いますが、何も役に立たないようです。任意のポインタをいただければ幸いです。
編集:このコードの次のバージョンは機能します。誰でも理由を説明できますか?
let transpose zs =
match zs with
| [xs;ys] ->
let rec transpose_helper (xs, ys) =
match (xs,ys) with
| ([],[]) -> []
| (x::xs , y::ys) -> [x;y] :: transpose_helper (xs,ys)
| _ -> failwith "The matrix is not a square matrix"
transpose_helper(xs,ys)
| _ -> failwith "Incorrectly formatted input"
transpose ([[1;2;3];[2;3;4]]);;
val transpose : zs:'a list list -> 'a list list
val it : int list list = [[1; 2]; [2; 3]; [3; 4]]
ただし、let を使用してバインドしない限り、上記の転置呼び出しにはユニット型が必要であると、コンパイラはまだ不平を言っています。誰かがここで何が起こっているのかを明確にしてもらえますか?