我確實有以下問題:
我得到一個輸入(整數串列),我想輸出一個三元組(串列的長度、串列的總和和串列的最大值)。
我確實有以下功能:
lengthSumMax :: Num a => [a] -> (Int, a, a)
lengthSumMax [] = (0, 0, 0)
lengthSumMax x = (length x, sum x, maximum x) --maximum is just a place holder
我知道最大值不起作用,因為我在這個函式中沒有 Ord。有沒有一種遞回方法可以在不使用 Ord 或輔助函式的情況下“手動”找到串列的最高值?
uj5u.com熱心網友回復:
有沒有一種遞回方法可以在不使用 Ord 或輔助函式的情況下“手動”找到串列的最高值?
該型別的專案需要在成員Ord型別類有一個什么樣的“最大的兩個專案”是指一個概念:該Ord型別類定義的功能,如>,<等來確定哪些專案是最大的。maximum與 一起使用Ord,否則檢索最大值沒有多大意義。
通過遞回執行此操作并不意味著Ord可以洗掉型別約束。事實上,我們可以實作maximum,但我們仍然需要一個最大值的概念。isLarger例如,我們可以使用一個函式來確定兩個引數中的哪一個是最大的專案,或者回傳最大的專案。
我們可以在這里使用遞回,并呼叫串列的尾部,然后相應地更新專案:
lengthSumMax :: (Num a, Ord a) => [a] -> (Int, a, a)
lengthSumMax [] = (0, 0, 0)
lengthSumMax (x:xs) = (…, …, …)
where (l, s, m) = lengthSumMax xs
您仍然需要填寫…部分的地方。對于這些,您可以使用串列的第一個元素,以及串列其余部分x的長度l、總和s和最大值m。請注意,您的最大值將0為非空串列回傳,因此將始終大于或等于零。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/350267.html
