我想打印到给定长度的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。
答案 0 :(得分:0)
您需要使用div
代替/
。
div
将获取两个积分值并返回另一个积分值 - 例如div 5 2 == 2
。然后你还需要摆脱truncate
电话。
/
&#34;浮点&#34;分裂。
fromIntegral
会将积分值转换为任何其他Num
类型。