2017-05-01 17 views
0

キーボードから文字列を読みたいのですが、なぜ動作していないのか分かりませんが、多くの方法を試しましたが、何もできませんでした!誰かが私を助けたり、私にアイ​​デアを与えることはできますか?キーボードから文字列を読むhaskell

type Polinom = [Int]  
scriePolinom :: Polinom -> String 
.... 
main = do 
    a<-getLine 
    --let a=[2,-5,1] 
    scriePolinom a 
+0

'main'は' IO() '型を必要としますが、' scriePolinom a'は 'String'型です。 – chepner

答えて

1

解析に対応するデータへのライン:

import Data.List 
parseIntList :: String -> [Int] 
parseIntList s = [read x :: Int | x <- words s] 

type Polinom = [Int]  
scriePolinom :: Polinom -> String 
.... 
main = do 
    a <- getLine 
    let intlist = parseIntList a 
    putStrLn $ scriePolinom intlist 
+0

'parseIntList :: String - > [Int] parseIntList s = [read x :: Int | X < - 単語S] 主=行う {< - のgetline scriePolinom(parseIntList A)} ' – Bob

+0

「は '実行' ブロックの最後の文でなければなりません式 < - のgetline scriePolinom(parseIntList A ) "私はそれをなぜ受け取りません! – Bob

+0

@Bob、あなたはIOモナドにいるので、何かをしなければならない、ほとんどそれを印刷して、答えに悪い – Netwave

1
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help 
Prelude> :type getLine -- you can also write :t getLine 
getLine :: IO String 

これはgetLineは常にこの場合待ち、不純ないくつかの種類のI/O操作を行った後(あなたを与えることを示していますを入力してと入力するまで、ユーザーがキーボードの何かを入力するには、タイプStringの値を入力します。これは理にかなって:も...

Prelude> :info String -- you can also write :i String 
type String = [Char] -- Defined in ‘GHC.Base’ 

と呼ばれる文字列、...文字のリストを。これらは、ユーザーが入力した文字/キーとまったく同じです。一般に、これらの文字はではないPolinomを適切に表します。たとえば、ユーザーが34958oiyq4ulbwreと入力した場合はどうなりますか?

をのように意味のある型の値に変換すると、の入力文字列が解析されます。どのようにするかは、入力が実際にどのような形になるかによって異なります。ユーザが係数に対して通常のハスケル構文を使用すべきである場合、例えば、 [2, -5, 1]、あなたが標準readパーサを使用することができます:Daniel Sanchez assumesとして、あなたは10進数でスペースで区切られた数字のちょうど列を期待して、

Prelude> scriePolinom (read "[2, -5, 1]") 
"[2,-5,1]" 

た場合、またはを、あなたはまず、言葉としてこれらの番号を分割することができます個別に各1読み:

0:

Prelude> scriePolinom . map read $ words "2 -5 1" 
"[2,-5,1]" 

が実行可能プログラムでこれを使用するには、あなたはgetLinereadの既製のビルドの組み合わせを使用することができますread/readLnが不正な形式の入力に対する堅牢ではないことを

main :: IO() 
main = do 
    a <- readLn 
    putStrLn $ scriePolinom a 

注意(彼らは合計機能じゃない) - 明示的な例外処理でそれをラップしない限り、これは単にプログラムをクラッシュします。重大なアプリケーションの場合は、フル機能の解析ライブラリ(​​など)を使用することをおすすめします。

関連する問題