2016-11-03 4 views
0

基本的には、ユーザーが1行に入力した「e」の数を確認するループがあります。問題は、すべての行の後に入力された合計の合計を表示することです。彼が1 'e'を入力して結果が1になるとしたら、2 'e'が入っている2行目を入力した後、合計は3となります...そして、その行が空になるまで続きます。合計でハズケルを作る

ここまでは私のコードです。それの問題:私は "トータル"を作る方法を知らない。私は明らかかどうか分からない...現在のコードは、各行で見つけられるが、合計ではない「e」の量を与える。

main = do 
    putStrLn "Enter your line" 
    line <- getLine 
    if line == "" 
    then return() 
    else do 
     let v = nume line 
     main 
     print v 

nume [] = 0 
nume (x:xs) 
|x == 'e' = 1 + nume xs 
| otherwise = nume xs 

結果:

Enter your line 
there is 3 e 
Enter your line 
there are 4 e 
Enter your line 
only 1 e 
Enter your line 

1 <<-- Should be 8 (3+4+1) 
4 <<-- Should be 7 (4+3) 
3 <<-- ok 
+0

これは、 'unless(null line)$そう... – Michael

答えて

0

はどういうわけかあなたが蓄積するのを追加する必要があります。最も単純な変更は、おそらく再帰的なアクションを除外し、最初は0である合計にパラメータ化することです。

inner n = do 
    putStrLn "Enter your line" 
    line <- getLine 
    if line == "" 
    then return() 
    else do 
     let v = n + nume line 
     inner v 
     print v 

main = inner 0 

nume [] = 0 
nume (x:xs) 
|x == 'e' = 1 + nume xs 
| otherwise = nume xs 
関連する問題