显示类型声明,Haskell是不用定义类型的原因,很像python
想要确定某个表达式的类型
1 *Main> :t ‘a‘ 2 ‘a‘ :: Char 3 *Main> :t True 4 True :: Bool 5 *Main> :t "HELLo" 6 "HELLo" :: [Char]
可以用:t 显示
所以当我们定义一个函数时,可以加上类型声明。
body.hs函数
addthree::Int -> Int ->Int -> Int addthree x y z =x+y+z
fac::Integer -> Integer fac n= product [1..n]
*Main> fac 100 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Integer自带 高精度,内存大多,就能表示多大的数。。
类型类
Eq类
*Main> ‘a‘==‘a‘ True *Main> 5/=6 True *Main>
Ord类 比较大小类。还有其他一些类
函数语法---模式匹配
类似c++Switch case
sayMe::Int-> String sayMe 1="One!" sayMe 2="Two!" sayMe 3="Three!" sayMe 4="Four!" sayMe 5="Five!" sayMe x="Not between 1 and 5!"
调用
*Main> :l body [1 of 1] Compiling Main ( body.hs, interpreted ) Ok, modules loaded: Main. *Main> sayMe 5 "Five!"
自己写head函数
1 head‘ :: [a]->a 2 head‘ []=error "Can call head on an empty list,dummy!" 3 head‘ (x:_)=x
As模式没看懂怎么回事,大概是自己调用自己??、
1 firstletter :: String->String 2 firstletter ""="Empty string,whoops!" 3 firstletter [email protected](x:xs)="The first letter of" ++ all ++ " is " ++[x] 4 5 6 *Main> firstletter "Dracula" 7 "The first letter ofDracula is D" 8 *Main>
哨卫,又好像case语句
1 bkm:: Double->String 2 bkm bmi 3 | bmi<=18.5="1!" 4 | bmi<=25.0="2!" 5 | bmi<=30.0="3!" 6 | otherwise=">3" 7 8 9 *Main> bkm 19.9 10 "2!"
where 关键字
避免重复计算一个值
1 bkm:: Double->Double->String 2 bkm weight height 3 | bmi<=skinny="1!" 4 | bmi<=normal="2!" 5 | bmi<=fat="3!" 6 | otherwise=">3!" 7 where bmi=weight/height^2 8 skinny=18.5 9 normal=25.0 10 fat=30.0
模块内的代码注意对其,类似python
let语句:绑定语句在前,后面跟表达式
1 *Main> (let a=100;b=200;c=300 in a*b*c,let foo="Hey";bar="there!" in foo++bar) 2 (6000000,"Heythere!")
居然也有Case 表达式。。
好玩点的递归啊!
原来这里快速排序可以这样写,好简洁
1 quicksort [] =[] 2 quicksort (x:xs)= 3 let small=[a|a<-xs,a<=x] 4 lager=[a|a<-xs,a>x] 5 in quicksort small++ [x] 6 7 Prelude> :l body 8 [1 of 1] Compiling Main ( body.hs, interpreted ) 9 Ok, modules loaded: Main. 10 *Main> quicksort [1,2,3,4,5,6,9,7,8] 11 [1,2,3,4,5,6,7,8,9]
虽然这个快排是这原始的那种吧,本身可能会有点问题,因为每次都是选择列表第一个元素,但是的确简洁啊
这篇博客主要计入自己开始入门Haskell的点滴。
写得不好,多多包涵!
时间: 2024-10-17 20:20:51