gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

Yet Another Haskell Tutorial中Exercise 3.10的答案

因为是刚开始看 haskell 所以很多概念不是很清楚,比如何时用 do 、“ <- ”和 let Exerceise3.10 算是做出来,但是肯定不是一个好办法。希望给我改改吧,顺便解答一下我的疑问。不得不说的是编译信息相当地没有用啊,这真是太遗憾了。

module Main

    where

   

import IO

 

main = do

    list <- askForNumber

    let 

       sAdd = show (foldl (+) 0 list)

       sMul = show (foldl (*) 1 list)

    putStrLn ("The sum is " ++ sAdd)

    putStrLn ("The production is " ++ sMul)

    putFactorial list

          

askForNumber = do

    putStrLn "Give me a number (or 0 to top):"

    sNum <- getLine

    let num = read sNum

    if num == 0

       then return []

       else do

           rest <- askForNumber

           return (num : rest)

          

putFactorial [] = do

    putStr ""

   

putFactorial (x : rest) = do

    let fact = factorial x

    putStrLn ((show x) ++ " factorial is " ++ (show fact))

    putFactorial(rest)

 

factorial 1 = 1

factorial x = x * factorial (x-1)

posted on 2008-09-27 19:28 gyn_tadao 阅读(150) 评论(1)  编辑 收藏 引用 所属分类: Haskell

评论

# re: Yet Another Haskell Tutorial中Exercise 3.10的答案 2008-10-28 09:05 flw

你看不懂编译信息是因为你没有掌握 Haskell 的类型系统。
掌握了类型系统之后,Haskell 的编译信息还是很有用的。

你的程序写得很不错!只是有些地方不太地道。
比如 putStrLn ("The sum is " ++ sAdd) 可以写作 putStrLn $ "The sum is " ++ sAdd。

欢迎到 Haskell@ChinaUnix.net 来交流,在这里回复帖子不太方便。

http://bbs.chinaunix.net/forum-142-1.html  回复  更多评论   



标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
 
相关链接:



<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(2)

随笔分类(98)

随笔档案(82)

相册

搜索

最新评论

阅读排行榜

评论排行榜

60天内阅读排行