如何在haskell中打印像“1+(3-2)”这样的公式?

时间:2016-02-03 02:16:47

标签: haskell

如何在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很新(也是英语。) 谢谢。

1 个答案:

答案 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

下一级问题是nString,但您希望它是某种数字。您可以使用readLn代替getLine并指定要使用的类型来解决此问题;例如:

main = do
    n <- readLn :: IO Double
    k <- getLine
    print $ 1+(n-1)+(n-1)*(n-2)/n^3