【发布时间】:2017-11-17 20:08:52
【问题描述】:
我想创建一个程序计算列表中所有元素的出现次数并返回最大序列。我的输入部分有问题。
输入由几个测试用例组成。每个测试用例都以包含两个整数 n 和 q (1 ≤ n, q ≤ 100000) 的行开始。下一行包含 n 个整数 a1 , ... , an (-100000 ≤ ai ≤ 100000
我希望 readNQ 将 n 和 q 作为 [int] 然后传递给 readArray,它将读取 n 元素并分配给 [int],如下所示
module Main where
import Text.Printf
import Data.List
main :: IO()
main = interact (showResults . maxSeqLength . readArray. readNQ)
readNQ :: String -> [Int]
readNQ = take 2 . (map read) . words
readArray :: [Int] -> String -> [Int]
readArray (n:xs) = take n . (map read) . words
showResults :: Int -> String
showResults x = printf "\n %d" x
maxSeqLength :: Eq a => [a] -> Int
maxSeqLength [] = 0
maxSeqLength xs = (maximum . map length . group) xs
但是,有一个错误。
frequent.hs:13:47: 错误:
• Couldn't match type ‘String -> [Int]’ with ‘[a0]’
Expected type: String -> [a0]
Actual type: String -> String -> [Int]
• Probable cause: ‘(.)’ is applied to too few arguments
In the second argument of ‘(.)’, namely ‘readArray . readNQ’
In the second argument of ‘(.)’, namely
‘maxSeqLength . readArray . readNQ’
In the first argument of ‘interact’, namely
‘(showResults . maxSeqLength . readArray . readNQ)’
readNQ 和 readArray 的类型有什么问题?
【问题讨论】: