2016-06-23 19 views
0

私はここにタプルのリストを持っています。そして、各タプルの最初の要素に関数dir..を適用したいと思います。どうやってやるの?ありがとうございます!Haskellのリストの各要素に関数を適用するには?

[ ("grid", gridResponse), 
("graph", graphResponse), 
("image", graphImageResponse), 
("timetable-image", timetableImageResponse x), 
("graph-fb",toResponse ""), 
("post-fb",toResponse ""), 
("test", getEmail), 
("test-post", postToFacebook), 
("post", postResponse), 
("draw", drawResponse),     
("about", aboutResponse), 
("privacy" ,privacyResponse), 
("static", serveDirectory), 
("course", retrieveCourse), 
("all-courses", allCourses), 
("graphs", queryGraphs), 
("course-info", courseInfo), 
("depts", deptList), 
("timesearch",searchResponse), 
("calendar",calendarResponse), 
("get-json-data",getGraphJSON), 
("loading",loadingResponse), 
("save-json", saveGraphJSON)] 
+4

'map'について知っていますか? – pdexter

+2

'map(dir。fst)data' – karakfa

+1

データを取り出して適用し、そのリストを返すか、元の位置に元の値を戻して、新しい値をfst位置に戻しますか?私は前者のレンズ、後者のレンズをお勧めします。 – jamshidh

答えて

2

mapを次のように定義される。

map :: (a -> b) -> [a] -> [b] 

これは、BとA型のリストを入力するタイプAから移行関数を取る関数であることを意味し、そしてその後のリストを返しますタイプb。 @pdexterと@karakfaがコメントで指摘したように、これはまさに必要なものです。

map f list 

だから何が必要ですか?さて、あなたのリストは、タプルのリストであり、あなたは、各タプルの最初の要素に関数を適用したいので(@karakfaが指摘しているとおりに)あなたが必要とするすべては

map (dir . fst) list 

これはとFST機能を構成であなたのカスタムdir関数は、あなたにタプルの最初の要素をとり、あなたのdir関数がそれに対して何をしても新しい関数を与えるために機能します。その後、マップはそれをリスト全体に適用します。

+0

ここでもう1つの質問:2つの変数をとる関数でマップを適用したいのですが?例えば、ここに 'doubleUs'という関数があり、' doubleUs = x * 2 + y * 2'があります。 xはリスト[1,2,3]から、yはリスト[2,3,4]からです。それをどうすれば実現できますか? –

+0

これまでにこのサイトで数回答えられました。例として[この質問(http://stackoverflow.com/questions/9448570/using-map-with-two-lists-rather-than-one-can-you-nest)を見てください。 – jkeuhlen

+0

それは動作します!どうもありがとうございます! –

関連する問題