数学之路(2)-四大神器-haskell(28)

24、Data.Set 

Set介于列表和映射之间,所有的元素唯一。

fromList构造Set

Prelude Data.Set> let x=Data.Set.fromList [11,22,33,44,55]

Prelude Data.Set> let y=Data.Set.fromList [91,32,33,44,55]

Prelude Data.Set> 

Intersection完成set的交

Prelude Data.Set> intersection  x y

fromList [33,44,55]

Prelude Data.Set> 

difference去除第一个set中的某些元素,这些元素是与第二个set的交。

Prelude Data.Set> Data.Set.difference x y

fromList [11,22]

Prelude Data.Set>

union完成2set的并

Prelude Data.Set> Data.Set.union x y

fromList [11,22,32,33,44,55,91]

Prelude Data.Set> 

nullsizememberemptysingletoninsertdeletemap相对应的操作类似。

25、定义模块

我们把以前的练习定义的部分函数创建一个自己的模块:

我们定义2个模块:Mymodule.Test2Mymodule.Test1

首先建立2个程序文件:test1.hstest2.hs

Test1.hs内容为 :

module Mymodule.Test1

(mylength

,oddcount

,evencount

,mysum

)where

--------------

mylength jh=sum[1|_<-jh]

oddcount jh=sum[1|x<-jh,x `mod` 2/=0]

evencount jh=sum[1|x<-jh,even x]

-------------

mysum :: (Integral a)=>a->a

mysum 0=0

mysum n=n + mysum (n-1) 

Test2.hs内容为 :

module Mymodule.Test2

(myfst

,mycnt

,mylst

,mymin

)where

------------------

myfst ::(a,b,c)->a

mycnt ::(a,b,c)->b

mylst ::(a,b,c)->c

myfst (a,_,_)=a

mycnt (_,b,_)=b

mylst (_,_,c)=c

----------------------

mymin::(Ord a)=>[a]->a

mymin []=error "empty list!"

mymin [x]=x

mymin (x:xs)

       |x<minval=x

   |otherwise=minval

       where minval=mymin xs 

将这2个文件放在需要使用这2个模块的程序执行目录的子目录Mymodule下。然后编写一个程序加载这2个模块,并调用里面的函数

import Mymodule.Test1

import Mymodule.Test2

test1_1 a=mylength a

test1_2 a=evencount a

test2_1 a=mycnt a

test2_2 a=mymin a

运行测试一下:

*Main> :load "mytestm.hs"

[1 of 3] Compiling Mymodule.Test2   ( Mymodule\Test2.hs, interpreted )

[2 of 3] Compiling Mymodule.Test1   ( Mymodule\Test1.hs, interpreted )

[3 of 3] Compiling Main             ( mytestm.hs, interpreted )

Ok, modules loaded: Mymodule.Test1, Mymodule.Test2, Main.

*Main> test1_1 [11,22,33]

3

*Main> test1_2 [11,22,33]

1

*Main> test2_2 [11,22,33]

11

*Main> test2_1 (11,22,33)

22

*Main> 

 

本博客所有内容是原创,未经书面许可,严禁任何形式的转载。

http://blog.csdn.net/u010255642

 

 

 

posted @ 2013-05-24 23:53  javawebsoa  Views(380)  Comments(0Edit  收藏  举报