下载此文档

交互式程序.ppt


文档分类:IT计算机 | 页数:约27页 举报非法文档有奖
1/27
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/27 下载此文档
文档列表 文档介绍
交互式程序
Haskell如何处理具有副作用的输入、输出( I/O);
基本I/O程序。
阅读第十八章
具有副作用的程序
如何编写可以读键盘和写屏幕的交互程序?例如,“从键盘读一个串”。如果说这种操作没有输入,输出是String,那么它不是函数,因为每次调用的结果不同。
这种与外界(读写设备等)交互作用的程序具有副作用,即程序运行的结果与外设的状态有关系。
Haskell 程序是数学函数,没有副作用,函数的运行结果只依赖于它的输入。
动作的类型
Haskell引入动作的类型表示交互式程序:
动作类型: IO a
类型 IO a 的元素表示完成某个 I/O 然后返回类型为 a的值的元素。.
例如: IO Char 包含返回类型Char的动作;
IO () 是返回一个值()的动作的类型,类型() 称为单位类型,它包含一个元素,也记作().或者说IO()的动作不返回任何值。
原始动作
Prelude 包含一些基本 I/O 动作.

getChar 从键盘读一个字符,并返回所读的字符:
getChar :: IO Char
putChar c 将输入字符输出至屏幕,返回():
putChar :: IO ()
动作 return v 只返回值v,没有其他作用:
return :: a  IO a
Other Library functions
从键盘读一个串的动作:
getLine :: IO String
将一个串写至屏幕:
putStr :: String -> IO ()
例如 hello :: IO ()
hello = putStr “Hello, World!”
写一个串并换行:
putStrLn :: String -> IO ()
putStrLn = putStr . (++”\n”)
一般的写动作:
print :: Show a => a -> IO ()
print = putStrLn . show
运行一个 I/O 程序:
一个I/O程序是一个动作的描述,Hugs可以“计算”这个动作或者执行这个动作:
Main> hello
Hello, World!
Main>
动作的结合
使用运算符>> 可以将两个动作a, b连接起来, 其结果是先执行a,然后执行b的动作:
hello :: IO ()
hello = puStr “hello”>> putStr “world\n”
动作序列- do 记法
Haskell提供了一种”do notaion”以顺序连接一系列运算。例如
hello :: IO ()
hello = do putStr “hello”
putStr “world\n”
又如,读一组字符:
getTwo :: IO (Char, Char)
getTwo = do x <- getChar
y <- getChar
return (x, y)
x是getChar返回的值
关于动作的连接
使用do记法时所有动作必须在同一列上;
每个动作返回的值可以用运算符<-取得,其右边是动作,左边是一个变量,表示动作返回的值。缺省情况下,动作返回的值被丢弃;
一系列动作顺序连接的返回值类型是最后一个动作返回值的类型。

交互式程序 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数27
  • 收藏数0 收藏
  • 顶次数0
  • 上传人一文千金
  • 文件大小0 KB
  • 时间2012-02-23