--Standered Diviation
module SD where
diviation:: IO()
diviation =
do
putStrLn ("Enter Students Marks")
marks <- getLine
let m = (read marks)::[Float]
let x = sum' m
let mean = (fromIntegral x)/(fromIntegral $ length)
let len = (read (length(m)))::Float
let divia = divi mean l
let std = map (^2) divia
let stdd = xx length(m-1) m
let final = map sqrt stdd
let tot = sum final
if(m==[])
then
putStrLn("empty List" ++ show(tot))
else do
putStrLn("The Standered Divation is" ++ (show(tot)))
sum' :: (Num a) => [a] -> a
sum' = foldl (+) 0
avg::Float->Float->Float
avg a b = (fromIntegral a)/(fromIntegral b)
divi::Float->[Float]->[Float]
divi a xs = [x-a | x <- xs]
xx::Float->[Float]->[Float]
xx a xs = [x/a|x<-xs]
我找不出这个程序有什么问题。是这样表示haskell程序问题(类型错误)
ERROR file:.\SD.hs:11 - Type error in application
*** Expression : read (length m)
*** Term : length m
*** Type : Int
错误你们可以请点我出的问题在这个方案,谢谢 *不匹配:[字符]
你不能在'Int'上调用'read',这是'length'返回的结果。 'read'用于字符串。 – 2011-06-12 17:18:15
你也没有真正使用这个值'len'。所以只要删除行'let len =(read(length(m)):: Float' – 2011-06-13 19:08:32