如何在haskell中解决这个问题?
” 机器选择整数(大于或等于1且小于或等于N) 在一次手术中具有相同的概率。 找出三个整数的中位数的例外概率 通过上述机器三次操作选择的是K.(K也是整数) “
首先我尝试了这个并得到了这个错误:
main = do
n <- getLine
k <- getLine
print 1+(n-1)+(n-1)*(n-2)/n^3
q4.hs:7:18: 无法将类型'[Char]'与'IO()'匹配 预期类型:IO() 实际类型:字符串 在'( - )'的第一个参数中,即'n' 在'(+)'的第二个参数中,即'(n - 1)'
q4.hs:7:24: 无法将类型'[Char]'与'IO()'匹配 预期类型:IO() 实际类型:字符串 在'( - )'的第一个参数中,即'n' 在'(*)'的第一个参数中,即'(n - 1)'
q4.hs:7:30: 无法将类型'[Char]'与'IO()'匹配 预期类型:IO() 实际类型:字符串 在'( - )'的第一个参数中,即'n' 在'(*)'的第二个参数中,即'(n - 2)'
q4.hs:7:35: 无法将类型'[Char]'与'IO()'匹配 预期类型:IO() 实际类型:字符串 在'(^)'的第一个参数中,即'n' 在'(/)'的第二个参数中,即'n ^ 3'
我该如何解决这个问题? 抱歉,我对haskell很新(也是英语。) 谢谢。
答案 0 :(得分:4)
第一级问题可以通过添加括号将参数分组到print
(或使用$
)来解决:
main = do
n <- getLine
k <- getLine
print (1+(n-1)+(n-1)*(n-2)/n^3)
-- OR
print $ 1+(n-1)+(n-1)*(n-2)/n^3
下一级问题是n
是String
,但您希望它是某种数字。您可以使用readLn
代替getLine
并指定要使用的类型来解决此问题;例如:
main = do
n <- readLn :: IO Double
k <- getLine
print $ 1+(n-1)+(n-1)*(n-2)/n^3