ある長さのパスカルの三角形に印刷したかったのです。Haskellプログラムでインスタンスエラーが発生していない
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」のすべての機能がすべて正常に機能していることを確認しました。 は、私はこのエラーを取得しています:私はライン4.Likeに代わりl_intの定数を使用する場合
PascalTriangle.hs:4:17:
No instance for (RealFrac Int) arising from a use of ‘fact’
In the expression: fact l_int 0
In an equation for ‘why’: why = fact l_int 0
In the expression:
do { l_str <- getLine;
let l_int = ...;
let why = fact l_int 0;
print why;
.... }
私はこのerror.Theのpogramについては何も理解できないのですが正常に動作する理由= print_row 4 0
てみましょう
このようなエラーを助長する一般的な戦略は、関数に型シグネチャを追加することです。 – user2297560
あなたの問題とは無関係ですが、将来は 'read <$> getLine'より' readLn'を好むかもしれません。パースエラーでは、前者は、あまりあいまいではない純粋な例外の代わりに、IO例外をすぐにスローします。 –