タプルのリストがあります。例:[("A",100,1),("B",101,2)]
。私はそれを簡単な方法で表示する必要があります。例:"your name is: A", "Your id is: 100"
。Haskellでタプルの中に値を出力する
誰でもこの解決策を見つけることができれば、大きな助けになるでしょう。前もって感謝します。
タプルのリストがあります。例:[("A",100,1),("B",101,2)]
。私はそれを簡単な方法で表示する必要があります。例:"your name is: A", "Your id is: 100"
。Haskellでタプルの中に値を出力する
誰でもこの解決策を見つけることができれば、大きな助けになるでしょう。前もって感謝します。
これを行う最も簡単な方法は、リスト内のいずれかの要素で機能する関数を作成することです。あなたのリストならば、そう
map :: (a -> b) -> [a] -> [b]
:次に、あなたはマッピング機能を使用すること、リスト内の各要素にこの機能を適用する
showDetails :: (String, Int, Int) -> String
showDetails (name, uid, _) = "Your name is:" ++ name ++ " Your ID is: " ++ show uid
:だからあなたのような何かをする必要がありますこれは明らかにあなたのタイプ[String]
の結果を与える
map showDetails xs
ので、あなたはに興味があるかもしれない:xs
と呼ばれ、あなたのような何かをしたいと思います関数:
unlines :: [String] -> String
これは単純に文字列のリストを取り、各要素が改行で区切られた文字列を作成します。単一のタプル、単なるパターンマッチするすべての要素については
main :: IO()
main = putStrLn . unlines . map showDetails $ [("A",100,1),("B",101,2)]
を、そして彼らと何かをする:すべて一緒にこれを置く
は、その後、あなたが提供します。これを行う関数があると、map
を使用してリスト全体を変換できます。
import Data.List (foldl')
show_tuple :: (Num a, Num b) => (String, a, b) -> String
show_tuple (name, id, something) =
"Your name is: " ++ name ++ "\n" ++
"Your ID is: " ++ (show id) ++ "\n" ++
"Your something: " ++ (show something) ++ "\n\n"
-- transforms the list, and then concatenates it into a single string
show_tuple_list :: (Num a, Num b) => [(String, a, b)] -> String
show_tuple_list = (foldl' (++) "") . (map show_tuple)
出力:
*Main Data.List> putStr $ show_tuple_list [("ab", 2, 3), ("cd", 4, 5)]
Your name is: ab
Your ID is: 2
Your something: 3
Your name is: cd
Your ID is: 4
Your something: 5
私が取るしようとしていますファイルからのタプルのリストとそれを表示する上記の方法で。しかし、最終的なジェネレータでタイプエラーと言うエラーが出ることになります。 – Roy
このソリューションを使用する場合は、「id」を変数名として使用しないように注意してください。これは、通常、識別関数として読み取られるためです。 –
迅速かつ汚いソリューション(@maksenovによる)
f (x,y,z) = "your id is " ++ (show y) ++ ", your name is " ++ (show x) ++ "\n"
main = putStrLn $ foldr (++) "" (map f [("A",100,1),("B",101,2)])
OR
main = putStrLn $ concatMap f [("A",100,1),("B",101,2)]
'foldr(++)" "$ map"は基本的に 'concatMap'です –
優れた答えです。応答していただきありがとうございます。 – Roy
@maksenov!私はconcatMapについて知らなかった。 :D –
ありがとう4 D応答 – Roy