代わりにこれを試してください:
(define (same-size-matrix? mtrx1 mtrx2)
(equal? (map length mtrx1) (map length mtrx2)))
このソリューションでは、各リストの全長 (マトリックス内の行数) を比較していますが、各サブリストの長さ (マトリックス内の各行の列数) は無視していることに注意してください。私の魂では、最初に各サブリストの長さを計算し、その後、すべての長さが等しいかどうかを確認します。たとえば、次の入力を使用します。
(define mtrx1 '((1 2 3 4) (4 5 6 6) (6 7 8 9)))
(define mtrx2 '((5 4) (3 2) (7 1)))
(same-size-matrix? mtrx1 mtrx2)
最初にsame-size-matrix?
はこの式を評価し、 の各サブリストの長さを見つけmtrx1
ます。ギザギザの配列を扱っている場合は、最初の長さだけでなく、すべての長さをチェックする必要があります。
(map length mtrx1)
; evaluates to '(4 4 4)
そして、次の式があります。これは、 に対して同じ操作を実行しmtrx2
ます。
(map length mtrx2)
; evaluates to '(2 2 2)
最後に、長さの 2 つのリスト (実際には、行ごとの列数) を比較して、期待される結果を返します。
(equal? '(4 4 4) '(2 2 2))
> #f
行列の行数が異なる場合、最後の比較では、リストのサイズが異なるかどうかも検出されることに注意してください。