selectMenu :: Int->IO()
selectMenu num
|(num==1)=convertFromDecimal
|(num==2)=--menu2
|(num==3)=putStrLn("3")
|(num==4)=putStrLn("4")
|(num==5)=putStrLn("5")
convertFromDecimal:: IO()
convertFromDecimal= do
putStrLn("\n\tConvert From Decimal To Binary & Octals \n")
putStrLn("----------------------------------------------------------\n")
putStrLn("Enter 5 decimal numbers [,,] : ")
input<-getLine
let n=(read input)::[Int] -- is this right?
--putStrLn (show n)
let result = convertionTO decToOct n
putStrLn(show result)`
decToOct :: Int -> [Int]
decToOct x = reverse(decToOct' x)
where
decToOct' 0 = []
decToOct' y = let (a,b) = quotRem y 8 in [b] ++ decToOct' a
convertionTO :: (Int -> [Int] -> [Int]) -> [Int] -> [Int]
convertionTO _ [] = []
convertionTO f (x:xs) = f x : convertionTO f xs
我纠正了这些错误。我纠正了这些错误后确实更新了问题。但这一次它给出了这个错误 我该如何解决这个错误?
Assignment.hs:49:51:
Couldn't match expected type `[Int] -> [Int]'
with actual type `[Int]'
Expected type: Int -> [Int] -> [Int]
Actual type: Int -> [Int]
In the first argument of `convertionTO', namely `decToOct'
In the expression: convertionTO decToOct n
Assignment.hs:66:25:
Couldn't match expected type `Int'
with actual type `[Int] -> [Int]'
In the return type of a call of `f'
In the first argument of `(:)', namely `f x'
In the expression: f x : convertionTO f xs
答案 0 :(得分:2)
(我在这里复制错误,以防您再次编辑问题。)
第一个错误
Assignment.hs:49:51:
Couldn't match expected type `[Int] -> [Int]'
with actual type `[Int]'
Expected type: Int -> [Int] -> [Int]
Actual type: Int -> [Int]
In the first argument of `convertionTO', namely `decToOct'
In the expression: convertionTO decToOct n
指的是这行代码
let result = convertionTO decToOct n
conversionTO
期望其第一个参数的类型为Int -> [Int] -> [Int]
,但decToOct
的类型为Int -> [Int]
。
第二个错误
Assignment.hs:66:25:
Couldn't match expected type `Int'
with actual type `[Int] -> [Int]'
In the return type of a call of `f'
In the first argument of `(:)', namely `f x'
In the expression: f x : convertionTO f xs
指的是这行代码
convertionTO f (x:xs) = f x : convertionTO f xs
convertionTO
生成[Int]
,因此:
的第一个参数必须是Int
。但是,f x
的类型为[Int] -> [Int]
。
如何解决这些问题?
我将假设您的第49行是正确的,并且convertionTO
的类型签名是错误的。在那种情况下它应该是
convertionTO :: (Int -> [Int]) -> [Int] -> [Int]
这不能解决第二个错误,因为f x
现在有[Int]
类型。
这里的问题是您使用:
。 :
将单个元素连接到列表的开头。你有两个你想要加入的列表。为此,请使用++
。
convertionTO f (x:xs) = f x ++ convertionTO f xs
答案 1 :(得分:1)
这些错误意味着您指的是不存在的功能。要么是因为你的名字输入错误,要么是因为你还没有定义它们。
例如,代替showresult
,您可能意味着show result
,我认为您的意思是decToOct'
而不是decToAny'
。我无法在您发布的代码中的任何位置看到对convertToDecimal
的任何引用,因此该错误可能位于其他位置。