我正在嘗試使用更高階的過濾器函式來傳遞這個值日志
test log =
[
('B', 100, 1104, "VTI", 1),
('B', 200, 36, "ONEQ", 3),
('B', 50, 1223, "VTI", 5),
('S', 150, 1240, "VTI", 9),
('B', 100, 229, "IWRD", 10),
('S', 200, 32, "ONEQ", 11),
('S', 100, 210, "IWRD", 12)
]
這些資料型別是:Char、Int、Int、String、Int
我希望能夠撰寫這樣的函式:
get_trades "VTI" test_log
它將提供此輸出:
[('B',100,1104,"VTI",1),('B',50,1223,"VTI",5),('S',150,1240,"VTI",9)]
我正在嘗試在 String 資料型別上對其進行過濾,目前我所能理解的只是 map 函式。
我試過這個:
get_trades (action, units, price, stocks, day) =
let filter_stocks | show stocks == map x
| otherwise = "Incorrect, a correct stock "
in
get_trades
我覺得我過于復雜了,因為我不確定如何使用過濾器功能。任何指導都會很棒:)
uj5u.com熱心網友回復:
你可以定義你得到上一個問題的函式(給定一個字串和一個交易,回傳交易是否有字串),然后在filter:
type Trade = (Char, Int, Int, String, Int)
test_log :: [Trade]
test_log = [
('B', 100, 1104, "VTI", 1),
('B', 200, 36, "ONEQ", 3),
('B', 50, 1223, "VTI", 5),
('S', 150, 1240, "VTI", 9),
('B', 100, 229, "IWRD", 10),
('S', 200, 32, "ONEQ", 11),
('S', 100, 210, "IWRD", 12)
]
check_stock :: String -> Trade -> Bool
check_stock x (_, _, _, y, _) = x == y
get_trades :: String -> [Trade] -> [Trade]
get_trades symbol = filter (check_stock symbol)
main = print $ get_trades "VTI" test_log
-- [('B',100,1104,"VTI",1),('B',50,1223,"VTI",5),('S',150,1240,"VTI",9)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/532465.html
標籤:哈斯克尔高阶函数
