嗨,伙計們,我正在嘗試使用 haskells 長度函式和模式匹配來檢查串列的長度是否不等于串列中串列的長度
這是我擁有的功能及其型別:
func :: [String] -> [[String]] -> String
其中回傳字串是“發現錯誤長度不同”或“長度相同”
這是我要輸入的內容,預期輸出如下:
[“行星”、“城市”] [[“木星”、“地球”]、[“柏林”、“馬德里”、“克拉科夫”]]
由于["Berlin", "Madrid", "Krakow"]大小為 3,["Planet", "City"]而大小為 2,因此輸出應為“找到的錯誤長度不同”
有點不確定如何做到這一點,并希望得到任何幫助!
uj5u.com熱心網友回復:
像這樣的事情會在線性時間內檢查它。
compLength :: [String] -> [[String]] -> String
compLength s = go (length s)
where go _ [] = "All Good! Hurray!"
go n (y:ys)
| n /= length y = "Error different lengths found" " [" unwords y "]"
| otherwise = go n ys
我認為這為您提供了根據您的確切需求定制輸出的基礎和必要資訊。
uj5u.com熱心網友回復:
您可以撰寫一個輔助函式來檢查兩個串列是否具有相同的長度,因此您可以實作一個函式:
sameLength :: [a] -> [a] -> Bool
sameLength … = …
當您實作了這樣的功能時,只需檢查所有子串列是否具有相同的長度。我們可以這樣做all :: Foldable f => (a -> Bool) -> f a -> Bool:
func :: [a] -> [[a]] -> Bool
func xs yss
| all (sameLength xs) yss = "Lengths are the same"
| otherwise = "Error different lengths found"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316806.html
上一篇:在Haskell中輸出多個檔案
