haskell maybe怎么用(haskell中::是什么意思)
haskell maybe怎么用
Maybe的定义是data Maybe a = Just a | Nothing. 其中Just和Nothing是构造器, a属于任意合法类型。Nothing多用于表示错误信息。比如这个函数x除以y:
div :: Float -> Float -> Maybe Float
div x y = if (abs y < 0.00001) then Just (x/y)
else Nothing--abs y < 0.00001表示y接近0
在这段程序,如果y接近0,除法结果会是Nothing。如果是div 2.6 2,结果是Just 1.3。
在取出Maybe的Just数据时,你可以用pattern matching(我不确定如何翻译,意思大致是类型结果匹配)取出数据。
如果你学过monad,用return写maybe会更加容易。
haskell中::是什么意思
类型转换,如read "11"::Int
或者在函数定义里面用来分隔函数名和后面的类型定义
比如
func :: String -> Int
func = .....
下面分享相关内容的知识扩展:
Haskell大神,求问一道程序找error的题!!!一共有8个errors
定义merge sort的一个函数,一共有8个error。 mergeSort :: ([a] -> [a] -> [a]) -> [a] -> [a] -> [a] mergeSort merge xs | length xs <= 2 =xs | else == merge (mergeSort merge first) ... 定义merge sort函数
共
8
error
mergeSort :: ([a] -> [a] -> [a]) -> [a] -> [a] -> [a]
mergeSort merge xs
| length xs <= 2 =xs
| else
== merge (mergeSort merge first)
(mergeSort merge second)
where first = take half ys
second = drop half xs
halve = (length xs) div 2
<
split
merge
mergesort :: (a -> a -> Bool) -> [a] -> [a]
mergesort pred [] = []
mergesort pred [x] = [x]
mergesort pred xs = merge pred (mergesort pred xs1) (mergesort pred xs2)
where
(xs1,xs2) = split xs
<
split :: [a] -> ([a],[a])
split xs = go xs xs where
go (x:xs) (_:_:zs) = (x:us,vs) where (us,vs)=go xs zs
go xs _ = ([],xs)
试试看
代码
能存
问题:halve没
引用没
定义
2
==等号使用错误
《Get Programming-Haskell》 *** 在线阅读全文,求百度网盘云资源
《Get Programming with Haskell》(Will Kurt)电子书网盘下载免费在线阅读
链接: https://pan.baidu.com/s/1ln_3VAKLO22GITW39cTZIA
书名:Get Programming with Haskell
作者:Will Kurt
豆瓣评分:9.7
出版社:Manning Publications
出版年份:2018-2-28
页数:616
About the Book:
Get Programming with Haskell leads you through short lessons, examples, and exercises designed to make Haskell your own. It has crystal-clear illustrations and guided practice. You will write and test dozens of interesting programs and dive into custom Haskell modules. You will gain a new perspective on programming plus the practical ability to use Haskell in the everyday world. (The 80 IQ points: not guaranteed.)
为什么有人怎么说:学会C和Haskell,别的就都容易了。学会了这两门一周之内学会Java
而且他们写的Java程序比一个五年的Java程序员写得还好.因为在编程方面,你站在更高的层次上了
这句话 压根就不对 还是 有一定的意义 还是 只不过是在“五年”这个词上有 写夸张而已
请大牛们 帮你给解释下
如果真的学会了这两门,现代的大多数语言基本都可以很快转型上手
c是过程式编程的典范,很多学校用来做计算机编程的入门,掌握c语言的语法对c系列的语言(c++, java等)都有好处,c语言的学习过程中也能对计算机的内存管理、资源分配也都能有一定了解,这些基础知识能让你快速转型到c系列的其它语言,不会有太多障碍。
haskell是函数式编程的典范,非常冷门,晦涩艰深。好处是代码精练,逻辑清晰,适合并发。是做计算机和数学理论研究的好语言。几本上没有什么商业和工业应用,生态环境不好。要想玩的溜,没有一两年功夫是不可能的,而且前提是数学基础足够好。跟现在广泛应用的编程语言大不一样,有其它语言的基础不会给你任何学习门槛的降低(好吧,lisp系语言的基础还是有很大帮助的)。但是,haskell却影响了很多其它语言,很多现代编程语言从haskell吸取了营养,变得更简练了(python的列表解析是非常好的例子)。总之,如果你不是搞偏理论的研究,这门语言没必要做为入门,更好是作为有了一定水平以后,再来从里面找一些感兴趣的东西学习。
另外这两门语言都不涉及面向对象,如果没有面向对象的基础,就算你精通这两门语言(可以称为神人了),一个星期搞定java也只是笑谈,毕竟面向对象的高级知识水也很深的。当然,你能掌握c和haskell,java稍微多花点时间积累一下,就能搞定了,毕竟难度低太多。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。