是否可以加快(或者在我的函数的情况下,删除)Haskell 中的相等性检查?我有一个函数可以总结一个代理的所有交互,其中交互是在两个代理之间。要对交互进行求和,首先必须检查代理是否等于交互中的第一个或第二个代理,然后对其求和。检查相等性几乎占用了我的程序运行时间的一半。
sumAgent :: [Interaction] -> Agent -> Int
sumAgent xs agent = foldr (\x acc -> acc + sumInteraction agent x) 0 xs
-- Use this in a map call of sumAgent to return the sums of a specific agent
sumInteraction :: Agent -> Interaction -> Int
sumInteraction agent (Interaction a1 a2 xs )
| (==) agent a1 = sum $ map fst scores
| (==) agent a2 = sum $ map snd scores
| otherwise = 0
where scores = map score xs
是否可以通过使用 ac 函数或仅检查部分代理的相等性来删除相等性检查或加速它?Eq 的实现是:
data Agent = Agent {
function::[(Bool,Bool)] -> Bool,
name::String,
position::(Int,Int),
dna::DNA
}
instance Eq Agent where
(==) a1 a2 = position a1 == position a2