Haskell程序中没有实例错误

时间:2016-05-30 19:17:15

标签: haskell

我想打印到给定长度的pascal三角形。

main = do 
  l_str <- getLine
  let l_int = read $ l_str :: Int     
  let why = print_row l_int 0
  print why
  return ()

print_row x y
     | (x < y) = " "    
     | otherwise = (print_column y 0 ) ++ "\n" ++ print_row x (y+1) 
print_column y r
     | (y < r) = ""
     | otherwise = (show $ fact y r ) ++ print_column y (r+1)   
fact n r
     |  (n >= r) = truncate $ (fact' n)/((fact' (n-r))*(fact' r))
fact' n
     | (n >= 0) = product [1..n]    

我检查了所有功能“print_row”,“print_column”一切正常。 我收到了这个错误:

  

PascalTriangle.hs:4:17:
      (RealFrac Int)没有因使用“事实”而产生的实例       在表达式中:fact l_int 0
      在'为什么'的等式中:为什么=事实l_int 0
      在表达式中:
        做{l_str&lt; - getLine;
             让l_int = ......;
             让为什么=事实l_int 0;
             打印原因;
             ....}

我无法理解有关此错误的任何内容。当我在第4行使用常量而不是l_int时,pogram工作正常。就像为什么= print_row 4 0。

1 个答案:

答案 0 :(得分:0)

您需要使用div代替/

div将获取两个积分值并返回另一个积分值 - 例如div 5 2 == 2。然后你还需要摆脱truncate电话。

/&#34;浮点&#34;分裂。

fromIntegral会将积分值转换为任何其他Num类型。