2016-02-03 86 views
0

我如何解決Haskell中的這個問題?如何在haskell中打印「1+(3-2)」這樣的公式?

「 甲機選擇的整數(大於或等於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: 不能匹配類型「[字符]」與「IO()」 預期類型:IO() 實際類型:字符串 在的第一個參數「( - )」,即「n」個 在第二參數'(*)',即'(n-2)'

q4.hs:7:35: 無法將類型'[Char]'與'IO()'相匹配 預期類型:IO ) 實際類型:字符串 在的第一個參數「(^)」,即「n」個 在的第二個參數「(/)」,即「N^3」

我如何解決這個問題? 對不起,我對哈斯克爾(和英語也很新)。 謝謝。

回答

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 
+2

當然,第三個問題是'k'可能應該用於某些事情,第四個是從問題描述中不可能告訴數學是否符合預期。 – dfeuer

+0

它的工作原理!很感謝 – Sirotama