免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3510 | 回复: 0
打印 上一主题 下一主题

贴两段自己的Haskell代码,贡献点人气。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-04 15:31 |只看该作者 |倒序浏览
实现对字符串的去头尾空白,按字符串分割,合并。
module String where

import Data.List
import Data.Maybe

stripPreBlank :: String -> String
stripSurBlank :: String -> String
stripBlank :: String -> String
join :: String -> [String] -> String
split :: String -> String -> [String]

stripPreBlank str =
  head $ filter (\s ->
                  not $ or $ map (\t ->
                                   isPrefixOf t s
                                 ) [" ", "\n", "\t", "\r"]
                ) $ tails str

stripSurBlank str =
  reverse $ stripPreBlank $ reverse str

stripBlank str =
  stripPreBlank $ stripSurBlank str

join tok strs =
  foldl1 (\a b ->
           a ++ tok ++ b
         ) strs

split tok str =
  let tmp = filter (isPrefixOf tok) $ tails str in
  map (drop $ length tok) $ zipWith (\a b ->
                                      take ((length a) - (length b)) a
                                    ) ([tok ++ str] ++ tmp) $ tmp ++ [""]

归并排序,改成稳定排序了
module List where
import Data.List

sortMerge :: (a -> a -> Bool) -> [a] -> [a]
sortMerge_ :: (a -> a -> Bool) -> ([a], [a]) -> [a]
sortJoin :: (a -> a -> Bool) -> [a] -> [a] -> [a]
sortJoin_ :: (a -> a -> Bool) -> ([a], [a]) -> [a] -> [a]

sortMerge _ [] =
  []
sortMerge _ [a] =
  [a]
sortMerge funCompare list =
  sortMerge_ funCompare $ splitAt ((length list) `div` 2) list

sortMerge_ _ ([], b) =
  b
sortMerge_ funCompare (a, b) =
  sortJoin funCompare (sortMerge funCompare a) (sortMerge funCompare b)

sortJoin _ a [] =
  a
sortJoin funCompare a b =
  sortJoin_ funCompare (partition (\x ->
                                      funCompare x $ head b
                                  ) a
                       ) b

sortJoin_ funCompare (a1, a2) b =
  a1 ++ [(head b)] ++ (sortJoin funCompare a2 $ tail b)


[ 本帖最后由 Magicloud 于 2008-12-5 13:14 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP