入力文字列を直接リストに変換する方法はありますか?Haskell:入力文字列を直接リストに変換する
は、入力文字列は、リストなどの形で、すでに次のとおりです。
[((1,2),x),((3,2),y)]
私はすべての値を取得するには、文字列経由することなく、他の関数で使用することができ
[((1,2),x),((3,2),y)]
に変換したい
同じリストを作成します。
これは可能ですか?
入力文字列を直接リストに変換する方法はありますか?Haskell:入力文字列を直接リストに変換する
は、入力文字列は、リストなどの形で、すでに次のとおりです。
[((1,2),x),((3,2),y)]
私はすべての値を取得するには、文字列経由することなく、他の関数で使用することができ
[((1,2),x),((3,2),y)]
に変換したい
同じリストを作成します。
これは可能ですか?
あなたのタイプにRead
インスタンスを定義するだけで済みます。
> data Animal = Dog | Cat deriving (Read, Show)
> read "[((1,2),Dog),((3,2),Cat)]" :: [((Int, Int), Animal)]
[((1,2),Dog),((3,2),Cat)]
ありがとうございました!完璧に働いた!グーグルの時間は、まだ解決策はとてもシンプルです...もう一度おねがいします! –
述べたように、あなたはAnimal
がRead
のインスタンスで提供する、あなたのString
はタイプ[((Int, Int), Animal)]
の値に変換するread
を使用することができます。インスタンスが自動的に導出することができます。
data Animal = Dog | Cat deriving (Show, Read)
別の潜在的な落とし穴が明示的にread
を解析するために知っているあなたは型注釈を指定する必要があることであるために:
main :: IO()
main =
do let list = read "[((1,2),Dog),((3,2),Cat)]" :: [((Int, Int), Animal)]
animals = map snd list
print animals
出力:
$ runhaskell test.hs
[Dog,Cat]
ありがとう!タイプ注釈が機能しているかどうかを指定する必要がありますか、それとも主に安全性のためですか/将来のエラーを防ぐのでしょうか? –
'read'の型を見てください:' read :: Read a => String-> a'。型変数 'a'を(readを型をクリアするコンテキスト内で' read'の結果を使って)完全に明瞭にするように制約すると、コンパイラはどの 'Read'インスタンスを使用するのかを知り、注釈を追加する必要はありません。他のケースでは、上のコードのように、型変数があいまいであると不平を言うでしょう。 – dkasak
さようなら!ありがとうございました –
'x'と' y'は何ですか? – leftaroundabout
あなたは 'read'を求めていますか? – melpomene
xとyは私が自分自身を定義したタイプです。 読み取りは数値の文字列をint型に変換するためだけではありませんか? –