免费注册 查看新帖 |

Chinaunix

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

求汉明数 [复制链接]

论坛徽章:
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 11:02 |只看该作者
你可以到:http://bbs2.chinaunix.net/thread-1427365-1-1.html
帖子中的
7. Patterns(模式)
看一下

论坛徽章:
0
3 [报告]
发表于 2009-04-28 11:11 |只看该作者
如果还是不太清楚:
可以给你一个例子,你就知道 x, xs, xss 分别绑定的值了

  1. f :: Int -> [a] -> [a]
  2. f n xss@(x:xs)
  3.   | n == 1 = [x]
  4.   | n == 2 = xs
  5.   | n == 3 = xss
  6.   | otherwise = error "invalid choice"
复制代码

run

  1. --                                 --传的值为 "abcde"

  2. *Main> f 1 "abcde"          --从这可以看出 x == 'a'
  3. "a"
  4. *Main> f 2 "abcde"           --从这可以看出 xs == "bcde"
  5. "bcde"
  6. *Main> f 3 "abcde"          --从这可以看出 xss == "abcde"
  7. "abcde"
复制代码

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

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-04-28 12:06 |只看该作者
原帖由 sw2wolf 于 2009-4-28 10:52 发表
xxs@(x:xs)表示什么?

就是将 x:xs 作为整体绑定到 xxs

[ 本帖最后由 MMMIX 于 2009-4-28 12:09 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2009-04-28 12:09 |只看该作者
原帖由 sw2wolf 于 2009-4-28 10:52 发表
打印头 1000 个汉明数(以2、3、5 的阶乘为因子的正整数)

这句话是错的,汉明数的定义是 以 2, 3, 5 的方幂为因子的正整数,也即 汉明数的质因子只有 2, 3, 5

论坛徽章:
0
6 [报告]
发表于 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 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2009-04-28 13:11 |只看该作者
原帖由 sw2wolf 于 2009-4-28 13:09 发表
谢谢! 另外只保存list的内容有什么简单方法吗?
red = [1,2,3,4,5]
hPutStrLn hFile $ show (red )

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

如何只保存 1 2 3 4 5呢?

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

论坛徽章:
0
8 [报告]
发表于 2009-04-28 16:33 |只看该作者
lz  的代码有问题,应该改为:


  1. main = print (take 100 hamming)

  2. hamming = 1 : (map (2*) hamming) ~~ (map (3*) hamming) ~~ (map (5*) hamming)
  3.     where
  4.         xxs@(x:xs) ~~ yys@(y:ys)    -- To merge two streams:
  5.             | x==y = (x : xs~~ys)   --  if the heads are common, take that
  6.             | x<y = x:xs~~yys    -- !!!!!!
  7.             | otherwise  = (y : xxs~~ys)  --    and proceed to merge the rest
复制代码

论坛徽章:
0
9 [报告]
发表于 2009-04-28 16:39 |只看该作者
win_hate 版主数学真好,羡慕ing

论坛徽章:
0
10 [报告]
发表于 2009-04-28 16:47 |只看该作者
这个帖子中也是错的
http://hi.baidu.com/%D9%A4%C2%EB/blog/item/720bda43b48bc91772f05d06.html
(我今天查啥叫汉明数的时候搜的)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP