type Matrix = [[Rational]]
valid :: Matrix -> Bool
valid xs = uniform [length x | x <- xs] && length xs >= 1
我正在嘗試測驗一個矩陣是否至少有一行和一列以及所有行的長度是否相同,但是當我在終端中輸入“有效 [[]]”時,它輸出為真。宣告有問題嗎?
uj5u.com熱心網友回復:
我假設uniform正在檢查串列中的所有元素是否相同。xs = [[]]在結果的情況下,[length x | x <- xs]將[0]是一個所有元素都相同的串列。
所以你錯過了檢查串列元素實際上是否大于 1。由于你已經檢查了所有元素是否相同,你只需要檢查第一個元素是否至少為 1。
請注意,您可能需要考慮條件的順序。在確定串列中至少有一個元素后,您應該只檢查串列的第一個元素的屬性。否則,如果您提供 input ,您可能會收到錯誤訊息[]。
uj5u.com熱心網友回復:
您可以使用模式匹配來檢查串列是否至少有一行,并且第一行是否至少有一列:
valid :: Matrix -> Bool
valid xs@((_:_):_) = uniform (map length xs)
valid _ = False
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517115.html
標籤:哈斯克尔
