2017-11-13 6 views
1

フォーム3の文字列を入力ユーザーからタプル(3,3)に解析したいと思いますか?ハスケルタプルを挿入する文字列を解析する(Int、Int)

stringtup :: String -> Maybe (Int, Int) 
stringtup s = do 
[(n, [c])] <- return $ reads s 
return (n, c) 

は、これが私の試みですが、それは仕事が..

+1

もちろん、あなたの試行錯誤を示すいくつかのコードを追加して、より多くのコンテキストを提供することを忘れないでください(3,3はテキストファイルから来ますか?ユーザーからの入力ですか?ユーザーは質問をdownvoteします... –

+0

それはターミナルの入力です、問題は私が情報を取得する方法ではなく、むしろ私は任意の文字列でそれを行うことができますが、あなたが文脈が好きなら私はコマンド機能を持っている私は私のメインで呼び出しているコマンドのカップルを取る。私の関数の1つは、例えば、コマンドd 3 3からの入力(x、y)を必要とします。その場合 – ruubel

+1

は私が推測する: "stringtup =(\ [A、B] - >(a、b)は)読みマップの言葉。。" をしかし、フォーマットが間違っている場合には、例外をスロー – dvaergiller

答えて

2

reads 1つの値のみを(可能であれば)解析しdoes't、その背中だけでなく、入力文字列の残りの部分を提供します。だから、

[(n, _)] <- return $ reads s 

作品や意志、"3 3"のための確かn≡3を持っています。

しかし、もう一方の数値も解析する必要があります。それでは、あなたが実際に行うだろうことは

[(n, s')] <- return $ reads s 

のような最初のバインド何かがあり、その後、s'から同じように他の数を解析します。

+0

stringtup :: String - >(Int、int) stringtup s = do [(n、s ')] < - 返信$が返される [(n、_)] < - 返信$が返される' ' 返品n、s)これは好きですか?私は実際の型(Int、(t0、String))を言っているエラーを受け取ります – ruubel

+0

それに似ています。 'do'ブロックに適切にレイアウトすることを条件にしてください。しかし、_parsed_の両方の値を最終結果として与える必要があります。 – leftaroundabout

+0

ありがとうございます! – ruubel

関連する問題