求汉明数

发布于 2022-08-07 17:05:30 字数 761 浏览 17 评论 9

打印头 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 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

许一世地老天荒 2022-08-22 11:10:50

这个帖子中也是错的
http://hi.baidu.com/%D9%A4%C2%EB/blog/item/720bda43b48bc91772f05d06.html
(我今天查啥叫汉明数的时候搜的)

音盲 2022-08-22 11:08:42

win_hate 版主数学真好,羡慕ing

奈何桥上唱咆哮 2022-08-22 11:08:36

原帖由 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

沙沙粒小 2022-08-22 11:08:36

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

复制代码

夜吻♂芭芘 2022-08-22 11:05: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 编辑 ]

说谎友 2022-08-22 11:02:07

原帖由 sw2wolf 于 2009-4-28 10:52 发表
打印头 1000 个汉明数(以2、3、5 的阶乘为因子的正整数)

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

娇妻 2022-08-22 07:20:58

原帖由 sw2wolf 于 2009-4-28 10:52 发表
xxs@(x:xs)表示什么?

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

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

廻憶裏菂餘溫 2022-08-22 03:13:35

如果还是不太清楚:
可以给你一个例子,你就知道 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 编辑 ]

倾`听者〃 2022-08-20 19:47:58

你可以到:http://bbs2.chinaunix.net/thread-1427365-1-1.html
帖子中的
7. Patterns(模式)
看一下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文