[英]mapping a function to a list in Haskell 2 elements a time
我在Haskell嘗試了一些問題(在Spoj ),我偶然發現了一些有輸入形式的問題:
testcase_1
testcase_1_continued
testcase_2
testcase_2_continued
要么
testcase_1 testcase_1_continued
...
正如您所看到的,只能通過在輸入上使用words
或lines
來解決這個問題,然后映射求解器函數以獲得類似
[solver test1, solver test2, ...]
一個人應該使用一個帶有兩個參數的函數,它們是兩個列表元素,一個接着一個,並得到:
[solver test1 test1continued, solver test2 test2continued, ...]
所以我很高興找到一個類似的map
函數,它一次應用一個函數2參數。我一直無法在Hoogle上找到任何東西,但是編寫這樣的函數很容易,我正在尋找一個問題的更一般方法。或者,如果我的方法(堅持map
)肯定是錯誤的,那么我也可以指出正確的方向。
我實際上發現實現一個函數map2非常有用,它將一個函數映射到一個列表,一次只能處理兩個參數:
map2 f [a,b,c,d] ==> [f a b, f c d]
使用chunksOf 。
> map (\[x, y] -> x + y) . chunksOf 2 $ [1..30]
[3,7,11,15,19,23,27,31,35,39,43,47,51,55,59]
map
是一個很好的方法,如果你的數據是這樣的結構,你可能想稍微改變它以更好地適應語義。 要做到這一點的方法之一將是“對了”的結果lines
,讓你得到[(line1, line2),(line3, line4),...]
map的第一個參數將是一個適用於這些元組的函數。
編輯:要進行擴展,通常的方法是讀取輸入,將其格式化為語義上有意義的格式,然后在結果上映射或折疊求解函數。 確切的解決方案取決於輸入數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.