我有一个在运行时从文件中读取并以元组表示的数据列表,如下所示:
[(1,0.1),(2,0.2),(3,0.3)...etc...]
我写了一个函数,它接受一个列表和两个整数作为参数并返回一个双精度数:
f :: [(Int,Double)] -> Int -> Int -> Double
f mylist i j
| j < n = (do some stuff)
| otherwise = max (f mylist (i-1) j) (some other stuff with m_i and p_i)
where m_i = fst $ mylist !! (i-1)
p_i = snd $ mylist !! (i-1)
现在,我是 Haskell 和纯函数概念的新手,但由于列表是静态的(它不会改变),我想知道是否真的需要将列表传递给函数?
通过无数层递归传递大列表是不好的做法吗?
鉴于我在运行时阅读了列表,我可以“设置”两个函数m
并p
像这样使用它们吗?
f :: Int -> Int -> Double
f i j
| j < n = (do some stuff)
| otherwise = max (f (i-1) j) (some other stuff with m_i and p_i)
where m_i = m (i-1)
p_i = p (i-1)
如果是这样,我如何设置m
andp
函数(它们是纯的,对吗?)以基本上返回我在运行时从文件中读取的值(如果我理解正确,这是不纯的)。
谢谢你的帮助!