我正在研究Data.List模块中的代码,并不能完全围绕这种排列实现:
permutations :: [a] -> [[a]]
permutations xs0 = xs0 : perms xs0 []
where
perms [] _ = []
perms (t:ts) is = foldr interleave (perms ts (t:is)) (permutations is)
where interleave xs r = let (_,zs) = interleave' id xs r in zs
interleave' _ [] r = (ts, r)
interleave' f (y:ys) r = let (us,zs) = interleave' (f . (y:)) ys r
in (y:us, f (t:y:us) : zs)
Run Code Online (Sandbox Code Playgroud)
有人可以详细解释这些嵌套函数如何相互连接/相互作用?
我将ojdbc6.jar复制到了tomcat安装文件夹中的lib文件夹中。当我部署在JDBC连接中使用Oracle驱动程序的Web应用程序时,服务器会说找不到驱动程序类,并且我被迫手动执行DriverManager.registerDriver,然后它可以工作。
可以这样做,以便在启动时注册驱动程序,而不必创建连接池也不必手动进行?
我在Haskell中实现了两个版本的Merge Sort,如下所示:
mergeSort1 :: (Ord a) => [a] -> [a]
mergeSort1 xs = foldl' (\acc x -> merge [x] acc) [] xs
Run Code Online (Sandbox Code Playgroud)
和
mergeSort2 :: (Ord a) => [a] -> [a]
mergeSort2 [] = []
mergeSort2 (x:[]) = [x]
mergeSort2 xs = (mergeSort2 $ fst halves) `merge` (mergeSort2 $ snd halves)
where halves = splitList xs
Run Code Online (Sandbox Code Playgroud)
其中'merge'和'splitList'实现如下:
merge :: (Ord a) => [a] -> [a] -> [a]
merge [] [] = []
merge xs [] = xs
merge [] ys …Run Code Online (Sandbox Code Playgroud)