免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sw2wolf
打印 上一主题 下一主题

求汉明数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-28 10:52 |显示全部楼层 |倒序浏览
打印头 1000 个汉明数(以2、3、5 的阶乘为因子的正整数)

main = print (take 1000 hamming)

hamming = 1 : map (2*) hamming ~~ map (3*) hamming ~~ map (5*) hamming
    where      
        xxs@(x:xs) ~~ yys@(y:ys)    -- To merge two streams:
            | x==y = (x : xs~~ys)   --  if the heads are common, take that
            | otherwise  = (y : xxs~~ys)  --    and proceed to merge the rest

xxs@(x:xs)表示什么?

BTW, 如何将[(1,2,3),(4,5,6), ...., ]中的数据存入文件啊?

[ 本帖最后由 sw2wolf 于 2009-4-28 11:02 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-28 13:09 |显示全部楼层
谢谢! 另外只保存list的内容有什么简单方法吗?
red = [1,2,3,4,5]
bracket (openFile "abc.txt" WriteMode) (hClose)
        (\hd1 -> hPutStrLn hd1 $ show (red ))

则文件内容是
[1,2,3,4,5]

如何整体保存成 1 2 3 4 5呢?  (不用一个元素一个元素地存)

[ 本帖最后由 sw2wolf 于 2009-4-28 13:14 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-04-29 08:17 |显示全部楼层
原帖由 MMMIX 于 2009-4-28 13:11 发表

一个成员一个成员的输出,或者重新定义 list 的 show


重新定义 list 的 show 应该不错, 但觉得麻烦, 目前用如下笨办法解决: 将show (red)结果转换成需要的格式

red = [1,2,3,4,5]
red2 = filter (\x -> (x /= '[') && (x /= ']')) $ map (\x-> if x == ',' then ' ' else x)  $ show (red)
bracket (openFile "abc.txt" WriteMode) (hClose)
        (\hd1 -> hPutStrLn hd1 $ red2)

论坛徽章:
0
4 [报告]
发表于 2009-04-29 10:34 |显示全部楼层
原帖由 izhier 于 2009-4-29 09:42 发表
Prelude> let s = map (\x -> if Char.isDigit x then x else ' ').show $ [1, 2, 3, 4]
Prelude> putStrLn s
1 2 3 4
Prelude> words s
["1","2","3","4"]


Char.isDigit, 很好, 但结果中两端多了空格, 也就是把"[", "]"也换成了空格

[ 本帖最后由 sw2wolf 于 2009-4-29 10:37 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP