在解决一些项目Euler问题以学习Haskell(所以目前我是一个完全初学者)时,我遇到了问题12.我写了这个(天真的)解决方案:
--Get Number of Divisors of n
numDivs :: Integer -> Integer
numDivs n = toInteger $ length [ x | x<-[2.. ((n `quot` 2)+1)], n `rem` x == 0] + 2
--Generate a List of Triangular Values
triaList :: [Integer]
triaList = [foldr (+) 0 [1..n] | n <- [1..]]
--The same recursive
triaList2 = go 0 1
where go cs n = (cs+n):go (cs+n) (n+1)
--Finds the first triangular Value with more than n Divisors
sol …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Haskell中开发一个启发式搜索库,并且使算法以某种方式表现的主要因素之一是数据结构; 所以我宣布了这个课:
class DataStructure ds where
add :: Eq a => Node a -> ds a -> ds a
addList :: Eq a => [Node a] -> ds a -> ds a
next :: Eq a => ds a -> (ds a, Node a)
isEmpty :: Eq a => ds a -> Bool
Run Code Online (Sandbox Code Playgroud)
然后,此类的实例用于扩展节点的常规搜索算法,如下所示:
generalSearch :: (DataStructure ds, Eq a, Hashable a)
=> ProblemSpace a -- ^ 'ProblemSpace' to be solved
-> Cost a -- ^ 'Cost' function to use …Run Code Online (Sandbox Code Playgroud)