郁闷
今天周六,公司附近基本上没有卖早餐的,不过今天看起来似乎比较幸运,竟然神奇的多了一家卖早鸡蛋灌饼的在地铁附近。为了早晨不挨饿就买了一个,但是不知道为什么,在去公司的路上我就一直感觉不太对,也一直在考虑只要再看到有一家卖早点的,我就把这个灌饼给丢掉。但是今天是周六嘛,我没有幸运的看到第二家卖早点的,只好将就一下了。
事情的发展是这样的,10点半吃完,到11点前就感觉不太对,我以为那是因为我还喝了格瓦斯,11点多出去抽烟,感觉更难受了,然后就去了厕所,先是拉肚子,然后出来又开始吐。中午吃饭时也感觉没有胃口,平时一碗面对我来说还略嫌不够,不过今天吃了连三分之一都不到就吃不下了,吃饭回来又接着吐。在拉肚子的时候任何一个屁都不值得相信,为了安全起见,又进了厕所,果然又是拉肚子,然后下午就由两个同事陪同去了医院急诊,拿了药回到家接着吐,然后睡觉,现在总算是好一些了。
这期间还有,从下午回来我就发现王爷是在家的,但是一直到我晚上起床都没听到他的动静,就打了电话给他,原来他老人家上吐下泄到今天凌晨4点,我勒个去的。
哦,还有,中日友好医院急诊内科的那个年轻女大夫很漂亮。
Haskell变量类型
基本类型
在Haskell中一切都是有类型的,如字符Char
字符列表[Char]
元组(Int, Bool)
,数值类型有Int
和Integer
,其中Int
受系统位数影响,比如64位系统,这种类型的范围就是-2-2…^63到2^63-1Integer
类型则非常大,可以尝试一下product [1..50]
。
函数类型
前面说到,Haskell的函数也是有类型的,在在hci中输入:t getChar
,返回是getChar :: IO Char
,其含义是getChar*这个函数返回一个Char
类型数据(这个地方不太会解释)。
由于Haskell可以推断类型,很多情况下似乎可以不用特意声明类型,但是为了使程序更易读并易于编译器检查,我们还是应该在定义函数时,在函数前加上函数类型,如下:
1 | byThree :: Int -> Bool |
例子中,第一行声明byThree
这个函数接受一个Int
型参数,返回一个Bool
型值。
类型变量
记得在前两天刚开始学Haskell时,学到一个函数maximum [1,2,3,4,2,5]
,这个函数接受一个列表做为参数,返回列表中最大的元素,来看一下这个函数的类型,:t maximum
,返回为maximum :: [a] -> a
,哦,这是什么意思哪?是说这个函数接受一个a
类型列表返回一个a
类型数值吗?是的,不过在这里a
不特指某一类型,而是可以为Char
也可以是Int
更可以是别的什么,这是一个变量,在这里就叫类型变量了,而使用类型变量指代参数类型的函数就可以叫做多态函数,这跟C++或Java的泛型有些相似。
当然,a
既然只是一个变量,那我们也可以用其它名字代替,比如b
。
还记得前面学元组时学到的两个函数吧fst
和snd
,看一下:t fst
,返回fst :: (a,b) -> a
,其含义就是fst
函数接受一个元组为参数,这个元组的第一个元素为a
类型,第二个元素为b
类型,该函数返回的数据类型与第一个元素相同,因为本函数返回的就是元组的第一个元素。再查看一下:t snd
,返回snd :: (a,b) -> b
,其含义就显而易见了。
结尾
今天身体不舒服,就写到这里吧,现在已经11点28了,马上休息,希望明天身体装备能完全恢复,今天就暂停一天的学习,明天可以多学一些进行补偿。
另外,希望王爷的身体也尽快恢复健康。