找回密码
 欢迎注册
楼主: 无心人

[分享] Haskell自我娱乐帖

[复制链接]
 楼主| 发表于 2008-11-21 21:34:45 | 显示全部楼层
今天写程序
算串珠素数
稍微优化点
出现了类型推定问题

后来问别人知道
四则运算两边必须是相同类型
加上了toInteger类型转换后搞定
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-11-25 16:43:02 | 显示全部楼层
针对
k-smith Number的
haskell求整数数位和的优化
假设做个表,存储4位数字的数位和
digitsSum n = if (n == 0) then 0 else ((n \`mod\` 10) + digitsSum (n \`div\` 10))

  let sd = listArray (0,9999) \$ map digitsSum [0..9999]
然后
sd!n就可得到n的数位和(n必须为 0..9999范围)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-1-10 15:58:50 | 显示全部楼层
匿名函数
Prelude Primes> (\x y -> x + y) ((\x -> x + 1) 0) ((\x -> x - 1) 0)
0
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-1-13 21:29:08 | 显示全部楼层
似乎容易入门,想学精,难。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-1-14 09:27:37 | 显示全部楼层
正确

但这个很容易验证数学问题
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-1-17 14:00:40 | 显示全部楼层
组合
combination                   :: [a] -> [[a]]
combination []                =  [[]]
combination (x:xs)            =  (map ([x] ++ ) (combination xs) )++ (combination xs)

排列
permutation :: Eq a => [a] -> [[a]]
permutation [] = [[]]
permutation xs = concatMap (\x -> map (x:) \$ permutation (delete x xs)) xs
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-23 13:26:37 | 显示全部楼层
Haskell
很强大
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-11 15:15:17 | 显示全部楼层
Haskell有函数作图,符号计算,甚至GUI方面的功能或者第三方库吗
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-12 10:38:24 | 显示全部楼层
GUI库是有的,作图的不知,网上有对应的第三方库的清单,很好找

至于,符号计算,我想只可能比C/C++强大

lisp是函数式语言的老祖宗,几个老的符号计算包,似乎多是lisp的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-12 17:33:08 | 显示全部楼层
http://bbs.emath.ac.cn/viewthrea ... p;extra=&page=1
上面问题的Haskell程序的一个比较紧凑的写法
  1. import List
  2. import Char(ord)

  3. main = do
  4.             print \$ zip [1..] [(x, y, x + y)|a<-[1..4], b<-[1..9]\\[a], c<-[1..9]\\[a, b], let x = 100 * a + 10 * b + c,
  5.                            d<-[a+1..9-a]\\[b, c], e<-[1..9]\\[a, b, c, d], f<-[1..9]\\[a, b, c, d, e], let y = 100 * d + 10 * e + f,
  6.                            x + y < 1000,
  7.                            (== 10) \$ length \$ nub ((map (\c -> (ord c) - (ord '0')) \$ show (x + y)) ++ [a, b, c, d, e, f, 0])]
复制代码

评分

参与人数 1鲜花 +2 收起 理由
wayne + 2 hehe,编译通过了

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-2 06:17 , Processed in 0.045343 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表