haskell示例

1 排版规则

反引号能够将一个命令的标准输出插在一个命令行中任何位置

A `plus` asd

Unix 使用/ 左斜杠 windows使用\斜杠

和等号对齐非常重要;

以下是错误例子 未对齐;

常用关键字

导入模块

:module +Data.List

import Data.Char (digitToInt)

:module +Data.Char

:unset +m 取消输入多行;

:t add 可以得到函数类型

:set +m 可以输入多行;

Cmd 命令行下 runghc file.hs

\

列表和元组的区别 即

[1,2,3] 和 (1,”2”, 三)的区别..

[1,2..5] 省略号定义数组二个冒号;

1:[1,2] 前增扩展数组。。

IO

<- 将 io string 转换为string .

:cd d:\haskexam

Prelude> saf<-readFile "output.txt"

saf :: String

saf

"E23E4QWREWQRWQR\n"

ad<-getLine 可以让用户输入ad变量的值

读取文件内容并显示;

readFile "D:\\haskexam\\1.txt"

putStrLn "fas"

fas

LET

let ad="asd" 给变量赋值;

prelude

lines "asd\nadsad"

根据换行符将一个字符串分为多个字符串

length [1,2] 数组的长度

show 1234 将数字转换为字符显示

"1234"

print 213 显示

213

Compare 比较大小

Head 、 tail 、take、drop 、last列表的操作‘

Fst 、snd 元组的操作

定义函数;

定义一个新的数据结构

定义枚举。

data Roygbiv = Red

| Orange

| Yellow

| Green

| Blue

| Indigo

| Violet

deriving (Eq, Show)

报错

error "dasdfas"

*** Exception: dasdfas

Break :分割列表

碰到奇数分为二个列表;

all &any

all odd [1,3,5]

True

isPrefixOf [2] [2,4]

isSuffixOf "24" "2342t4"

zip [1,2,3] [4,5]

[(1,4),(2,5)]

:module -Data.List

Prelude Data.List>zipWith (+) [1,2,3] [4

[5]

words "das asd asd"

["das","asd","asd"]

unwords ["jumps", "over", "the", "lazy", "dog"]

"jumps over the lazy dog"

let ad = map toLower "D A"

map toUpper "dasd ads"

map negate [1,2,3]

[-1,-2,-3]

map (dropWhile isSpace) [" a","f"," e"]

["a","f","e"]

zip3 "foo" "bar" "quux"

[('f','b','q'),('o','a','u'),('o','r','u')]

map (+3) [24,36]

[27,39]

(`elem` ['a'..'z']) 'f'

True

(init.tail) "fas"

"a"

(init.tails) "fas"

["fas","as","s"]

map isUpper "fdfD"

[False,False,False,True]

isUpper (head "ad")

--多行注释 单行注释;

Prelude> {-

Prelude| asd

Prelude| asd

Prelude| -}

//

:show imports

标准引导库 Prelude.hs

error "fa"

*** Exception: fa

div 4 2

2

Mod

Negate

Abs

'\98'

'b'

1.2e3

1200.0

[2*n | n<-[2..14] , odd n]

[2*n | n<-[2..14] , n>5]

[m+n | (m,n)<-[(1,2),(3,4)] ]

复制;

replicate 3 'f'

"fff"

it :: [Char]

(0.02 secs, 0 bytes)

1:[1]

[1,1]

[1]++[2]

[1,2]

[1,2]!!0

1

concat [[1,2,33],[4,5]]

[1,2,33,4,5]

or [True, False]

True

let x=5 in x^2+2*x

35

let squartwo n m = sqn+sqm

Prelude| where

Prelude| sqn = n*n

Prelude| sqm = m*m

Prelude|

squartwo :: Num a => a -> a -> a

(0.00 secs, 0 bytes)

Prelude> squartwo 2 3

13

sum [2..6]

20

concat ["1","2"]

"12"

let doubleAll xs = [2*x|x<-xs]

Prelude|

doubleAll :: Num t => [t] -> [t]

(0.00 secs, 0 bytes)

Prelude> doubleAll[2,3]

[4,6]

map (+3) [1,2,3]

[4,5,6]

let add a b = a+b

map (add 2) [1,2]

[3,4]

map (replicate 2) [1,2,3]

[[1,1],[2,2],[3,3]]

map fst [(1,2),(3,5),(6,3),(2,6),(2,5)]

[1,3,6,2,2]

[x+3|x<-[1,2,3]]

[4,5,6]

Data.List;

intersperse '_' "faf"

"f_a_f"

intercalate "fs" ["12","34"]

"12fs34"

transpose [[1,2],[3,4],[6,7]]

[[1,3,6],[2,4,7]]

map sum $ transpose [[0,3,5,9],[10,0,0,9],[8,5,1,-1]]

[18,8,6,17]

map sum (transpose [[0,3,5,9],[10,0,0,9],[8,5,1,-1]] )

sum [1,2,5]

8

concat ["24", "3"]

"243"

concat $ map (replicate 4) [1..3]

[1,1,1,1,2,2,2,2,3,3,3,3]

concatMap (replicate 4) [1..3]

[1,1,1,1,2,2,2,2,3,3,3,3]

take 6 $ iterate (*3) 2

[2,6,18,54,162,486]

splitAt 3 "heyman"

("hey","man")

takeWhile (>3) [6,5,4,3,2,1,2,3,4,5,4,3,2,1]

[6,5,4]

'f'/='g'

True

'f'=='g'

False

takeWhile (<10000) $ map (^3) [1..]

[1,8,27,64,125,216,343,512,729,1000,1331,1728,2197,2744,3375,4096,4913,5832,6859,8000,9261]

span (/='i') "this"

("th","is")

break (=='i') "thisis"

("th","isis")

sort [14,3,54]

[3,14,54]

reverse $sort [14,3,54]

[54,14,3]

group ["1","1", "3"]

[["1","1"],["3"]]

zip [1,2,5] [3,4]

[(1,3),(2,4)]

let x=[1,2] in sum x

3

isInfixOf "cat" "catda"

True

"hey" `isPrefixOf` "hey there!"

True

"hey" `isPrefixOf` "f hey there!"

False

"there!" `isSuffixOf` "oh hey there!"

True

"there!" `isSuffixOf` "oh hey there! f"

False

elem 1 [1,2,3]

True

elem 11 [1,2,3]

False

partition (>3) [1,3,5,6,3,2,1,0,3,7]

([5,6,7],[1,3,3,2,1,0,3])

let bign n = if n>0 then True else False

let ds = partition (bign) [-5,1,3,5,6,3,2,1,0,3,7]

ds

([1,3,5,6,3,2,1,3,7],[-5,0])

partition (`elem` "AB") "BOBsidneyMORGANeddy"

("BBA","OsidneyMORGNeddy")

find (=='f') "gasdf"

Just 'f'

find (=='f') "gasdgd"

Nothing

'f' `elem` "gas"

False

elemIndex 11 [1,2,3]

Nothing

elemIndex 1 [1,2,3]

Just 0

elemIndices 1 [1,2,3,1]

[0,3]

findIndices (=='f') "gasdgfdf"

[5,7]

findIndex (=='f') "gasdgfdf"

Just 5

zip [1,2] [3,4,5]

[(1,3),(2,4)]

zip [1,2,3,4,5] [3,4,5]

[(1,3),(2,4),(3,5)]

zip4 [2,3,3] [2,2,2] [5,5,3] [2,2,2]

[(2,2,5,2),(3,2,5,2),(3,2,3,2)]

zipWith (+) [1,2,3] [4,5,2,2]

[5,7,5]

lines "first line\nsecond line\nthird line"

["first line","second line","third line"]

unlines ["first line", "second line", "third line"]

"first line\nsecond line\nthird line\n"

words "first li ne"

["first","li","ne"]

words "first line"

["first","line"]

unwords ["first","li","ne"]

"first li ne"

nub [1,3,2,4,3,2,1,2,3,4,3,2,1]

[1,3,2,4]

nub "Lots of words and stuff"

"Lots fwrdanu"

delete 'h' "hey there ghang!"

"ey there ghang!"

delete 'h' $ delete 'h' $ "hey there ghang!"

[1,2] \\ [2,3,4]

[1]

[2,3,4] \\[1,2]

[3,4]

union [1,2,3] [2,3,4]

[1,2,3,4]

[1,2,3] `intersect` [2,3,4]

[2,3]

insert 4 [15,2,2,3,5,6,7]

[4,15,2,2,3,5,6,7]

insert 4 [2,2,3,5,6,7]

[2,2,3,4,5,6,7]

insert 3 [1,2,4,3,2,1]

[1,2,3,4,3,2,1]

groupBy登场! 它取一个含两个参数的函数作为参数来判定相等性.

let values = [1,2,3,-3,-2,1,2,3,-3,-2]

let compaire2Num x y = if (x*y > 0 ) then True else False

groupBy ( compaire2Num ) values

[[1,2,3],[-3,-2],[1,2,3],[-3,-2]]

groupBy :: (a -> a -> Bool) -> [a] -> [[a]]

functor a,a 返回Bool;

入参为【a】,出差为【【a】】

group [1,1,1,2,2,3]

[[1,1,1],[2,2],[3]]

let sortGT a b = if a< b then GT else LT

sortBy sortGT values

[3,3,2,2,1,1,-2,-2,-3,-3]

let xval = [13,12,3]

sortBy sortGT xval

Data.Char

Prelude Data.List> :m Data.Char

Prelude Data.Char> :t group

Prelude Data.Char> import Data.List

(0.00 secs, 0 bytes)

Prelude Data.Char Data.List>

isControl '、'

False

isSpace ' '

True

isLower 'a'

True

isUpper 'A'

True

isAlpha 'a'

True

isAlpha '4'

False

isAlphaNum '1'

True

isPrint 'f'

True

isDigit '2'

True

isOctDigit '7'

True

isOctDigit '8'

False

isHexDigit 'g'

False

isHexDigit 'e'

True

isLetter '$'

False

isNumber '1'

True

isPunctuation ';'

True

isSymbol '$'

True

isAscii '&'

True

all isLetter "gdff"

True

all isLetter "gd2f"

False

generalCategory 'a'

LowercaseLetter

map generalCategory "f1'$"

[LowercaseLetter,DecimalNumber,OtherPunctuation,CurrencySymbol]

map toUpper "fa2"

"FA2"

map toTitle "gfa das"

"GFA DAS"

digitToInt 'f'

15

intToDigit 15

'f'

ord '%'

37

chr 97

'a'

Prelude Data.Char Data.List> let encode shift msg = map chr $ map (+ shift) ords

Prelude Data.Char Data.List| where ords = map ord msg

Data.Map

Prelude Data.Char Data.List> import

(0.02 secs, 551624 bytes)

Prelude Data.Char Data.List Data.Map>

Prelude.filter odd [2,4,1,3,6,8,5,7]

:t Data.Map.filter

Data.Map.filter :: (a -> Bool) -> Map k a -> Map k a

fromList [("betty","555-2938"),("bonnie","452-2928"),("lucille","205-2928")]

Loading package array-0.4.0.1 ... linking ... done.

Loading package deepseq-1.3.0.1 ... linking ... done.

Loading package containers-0.5.0.0 ... linking ... done.

fromList [("betty","555-2938"),("bonnie","452-2928"),("lucille","205-2928")]

fromList [(1,2),(3,4),(3,2),(5,5)]

fromList [(1,2),(3,2),(5,5)]

去掉重复key的

import qualified Data.Map as Map

Map.insert 3 100 Map.empty

fromList [(3,100)]

Map.insert 5 600 (Map.insert 4 200 ( Map.insert 3 100 Map.empty))

fromList [(3,100),(4,200),(5,600)]

let am = Map.empty

Map.insert 3 100 am

fromList [(3,100)]

Map.null Map.empty

True

let am = Map.fromList [(2,4),(3,3),(4,2),(5,4),(6,4)]

Map.size am

5

Map.singleton 3 9 $ Map.insert 5 9

:368:1:

Couldn't match expected type `(Map k1 a1 -> Map k1 a1) -> t0'

with actual type `Map k0 a0'

The first argument of ($) takes one argument,

but its type `Map k0 a0' has none

In the expression: singleton 3 9 $ Data.Map.insert 5 9

In an equation for `it': it = singleton 3 9 $ Data.Map.insert 5 9

Map.insert 5 9 $ Map.singleton 3 9

fromList [(3,9),(5,9)]

am

fromList [(2,4),(3,3),(4,2),(5,4),(6,4)]

Map.lookup 2 am

Just 4

Map.member 2 am

True

Map.map (*100) am

fromList [(2,400),(3,300),(4,200),(5,400),(6,400)]

Map.map (>0) am

fromList [(2,True),(3,True),(4,True),(5,True),(6,True)]

Map.filter (>3) am

fromList [(2,4),(5,4),(6,4)]

Map.fromListWith max [(2,3),(2,4),(2,1)]

fromList [(2,4)]

Map.fromListWith (+) [(2,3),(2,4),(2,1)]

fromList [(2,8)]

Map.insertWith (+) 3 100 $ Map.fromList [(3,4),(5,103),(6,339)]

fromList [(3,104),(5,103),(6,339)]

Map.insertWith (-) 5 100 $ Map.fromList [(3,4),(5,103),(6,339)]

fromList [(3,4),(5,-3),(6,339)]

Data.Set

import qualified Data.Set as Set

let text1 = "I just had an anime dream,Anime..,Reality..,Are they so different?"

let set1 = Set.fromlist text1

set1

fromList " ,.?AIRadefhijlmnorstuy"

Set.intersection set1 set2

Set.difference set1 set2

Set.union set1 set2

Set.null Set.empty

True

Set.null set1

False

Set.insert 4 $ Set.fromList [9,3,8,1]

fromList [1,3,4,8,9]

Set.delete ' ' $Set.delete 'a' aa

Set.fromList [2,3,4] `Set.isSubsetOf` Set.fromList [1,2,3,4,5]

True

Set.fromList [1,2,3,4,5] `Set.isProperSubsetOf` Set.fromList [1,2,3,4,5]

Set.map (+1) $ Set.fromList [1,2,3,4,5]

Set.filter odd $ Set.fromList [3,4,5,6,7,2,3,4]

:cd d:\haskexam

:load geometry.hs

module Geometry

(

sphereVolume

,sphereArea

,cubeVolume

,cubeArea

,cuboidArea

,cuboidVolume

) where

sphereVolume :: Float -> Float

sphereVolume radius = (4.0 / 3.0) * pi * (radius ^ 3)

data Shape = Circle Float Float Float | Rectangle Float Float Float Float deriving (Show)

let surface (Circle _ _ r) = pi * r ^ 2

surface $ Circle 10 20 10

314.15927

Data.List.map (Circle 10 20) [4,5,6,6]

[Circle 10.0 20.0 4.0,Circle 10.0 20.0 5.0,Circle 10.0 20.0 6.0,Circle 10.0 20.0 6.0]

//取得愿的半径

let radiusCircle (Circle _ _ r) = r

radiusCircle $ Circle 1 1 2

2.0

data Circle = Circle{x::Float,y::Float, radius::Float} deriving (Show)

x $Circle 2 3 4

2.0

data Person = Person {age::Int, name::String} deriving (Show,Eq)

read "1"::Int

1

compare 2 3

LT

compare True False

GT

True > False

True

deriving (Eq, Ord, Show, Read, Bounded, Enum)

小写的不行

data ab = abc| efg

:67:11: Not a data constructor: `abc'

首字母大写ok.

data AB = ABS| EFG

data AB = ABS | EFG

它也是Enmu的实例,可以得到前一天和后一天,并且可以对此使用List的区间。

ghci> succ Monday

Tuesday

ghci> pred Saturday

Friday

x<-getLine

foldr (*)3 [1 ,2,3]

18

你可能感兴趣的:(haskell示例)