我正在尝试获取列表中所有元素的总和,到目前为止有效。我有很多元素。我想将金额除以金额,以获得此列表中所有元素的平均值。该部门给我一个错误,我无法解决。 我的代码:
module HA
where
import FPH
import Data.List.Split
import Data.Char
import qualified Data.Text hiding (length)
s1 = splitOn " " sonnet18
s2 = splitOn " " sonnet73
countSubStrs str sub = length $ Data.Text.breakOnAll (Data.Text.pack sub) (Data.Text.pack str)
task :: IO ()
task = do
let wordLengths = map length
let wl1 = wordLengths s1
let wl2 = wordLengths s2
let getsum1 = sum wl1
let ln [] = 0
let ln (x:xs) =1 + ln xs
let average = wl1 `quot` getsum1
print average
错误:
Couldn't match expected type '[Int]' with actual type 'Int'
In the second argument of `quot´, namely `getsum1´
In the expression: wl1 `quot´ getsum1
In an equation for `average´: average = wl1 `quot´ getsum1
答案 0 :(得分:1)
让我们从一些类型开始:
task :: IO ()
task = do
let wordLengths = map length -- (:: [[Char]] -> [Int])
let wl1 = wordLengths s1 -- (:: [Int])
let wl2 = wordLengths s2 -- (:: [Int])
let getsum1 = sum wl1 -- (:: Int)
let ln [] = 0
let ln (x:xs) =1 + ln xs
let average = wl1 `quot` getsum1
print average
我们应该在这里查看的术语是wl1
和getsum1
,因为我们的错误发生在涉及它们的操作上。首先,函数quot
:
ghci>> :t quot
Integral a => a -> a -> a
因此我们可以将它应用于作为类型类Integral
成员的两个参数。这两个参数是否满足该约束?我们说getsum1
上面有Int
类型,所以我们在那里很好。另一方面,wl1
的类型为[Int]
。这是我们的问题。
我们应该如何根据您的概述来解决这个问题?我们希望将长度之和除以列表中的项目数(可能是为了得到原始[[Char]]
中单词的平均长度)。因此,我们希望将getsum1
除以length wl1
(取决于您对结果的预期格式,有几种方法可以执行此操作)。