`
liqiangzju
  • 浏览: 19680 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

体验一把haskell

阅读更多

这几天做到PAT一道比较数据大小的题PAT1065,题目不难,应该说是一道送分题,就是开数组,然后模拟人工计算的过程进行计算,再比较下就行。做完之后,联想到haskell的Integer类型是无限大的,那用到这个题里岂不是甚好!而PAT正好又支持用haskell进行答题,于是我就蛋疼地尝试用haskell来做这个题。

 

不过之前的haskell的知识快忘得差不多了,赶紧上网脑补。花了不少时间把程序写好了,就下面几句:

run x count
    | x == 0 = return ()
    | otherwise = do
        [a,b,c] <- (map read.words) `fmap` getLine 
        let s= a + b
            sc=show count
        putStr ("Case #"++sc++": ")
        if s > c
            then putStrLn "true"
            else putStrLn "false"
        run (x-1) (count+1)

main = do
    n <- read `fmap` getLine
    run n 1

 

代码总共15行左右,用C来写的话应该在25行的样子,的确要稍微简洁了些。不过我还是感觉这段代码带有浓浓的命令式语言(imperative language)的编程风格,应该还可以再简化些。写的过程中碰到N多问题,主要是之前学习的时候,大部分时间都在学习haskell的语法和理念,都没有真正涉及几个像样有IO的程序。

 

感叹下haskell确实比较难用,对新人一点都不友好,难怪没几个公司敢用,招不到人啊!不像什么java,c,c++,或者php什么的,满大街的程序员,随手拈来都能够应付。但是haskell程序员可不是那么好当的,没两把刷子还真不敢对别人说自己会haskell。haskell里面新的概念如monad,lazy evaluation,purity,type class,type inference等,对其他语言阵营,尤其是非函数式编程范式语言中切换过来的人,无疑是一场颠覆认知的狂风骤雨,很难领会,不说进阶,即使是入门也需要费很大精力。

 

我在学习这些概念的时候,一开始是觉得很新奇,函数可以被当成变量,任意传递,甚至函数可以partial apply形成新的函数,原来程序还可以这麽写,不过学得稍深一点后,对haskell中的太多限制很不爽,有点质疑其背后的设计理念,没有循环,所有的循环都得通过递归来实现,没有变量的概念,虽然看起来好像是几个变量,但是他们跟C语言中的变量截然不同,可以把他们理解成不变量,因为一旦绑定为某一个值,那么他就是那个值,不会改变也不能够改变。

 

haskell引以为傲的purity,即没有side effect,在语言设计者的眼里,这就是一朵上上乘的皇冠,有了purity,程序出错的几率大大减小了,并行也不在话下,haskell的粉丝们都说

 
用haskell写的程序,只要编译通过了,就不会有问题了

 haskell严格的类型检查,的确让程序员能够在第一时间发现自己程序中的错误,减少犯错的机会。

 

要吐槽一下,如果你是haskell新手,你一定会发现haskell的编译提示非常不友好,即便是个经验丰富的老手也会常常被ghc莫名其妙的错误提示摇头晃脑头晕目眩。haskell代码的简洁也依赖于程序的结构性,尤其是代码缩进必须要规范,但是编译器又不能够识别缩进的问题,只会在你缩进不正确的时候,按照你当前的缩进进行parse,然后给出一堆你怎么也想不明白的错误提示。

 

haskell是一门很有趣的语言,很多概念与代数中的一些概念是同根同源的,小时候只能够死记硬背地把某一个名词记住,现在我才对这些光鲜的名词背后的意思有了了解,这是我又一次觉得那麽多年的数学还是不算白学。三月的PAT考试希望能够发挥得好一点,Curry大叔在天之灵可要保佑我,你看我在实验室都是偷偷抽出时间来学习您的语言,多麽不容易。;)



 
 
 
 

 

 

  • 大小: 5.5 KB
分享到:
评论

相关推荐

    Atom-atom-haskell,Atom的一组Haskell包。贡献给Technix/Atom.zip

    "Atom-atom-haskell"是专门为Atom设计的一组Haskell语言相关的扩展包,旨在增强Atom在Haskell开发中的功能和体验。 1. **Haskell支持**:这些包为Atom提供了Haskell语法高亮,使得代码更加易于阅读。它们还可能包括...

    haskell-mode emacs

    在 Emacs 中,`haskell-mode` 是一个专门为了提升 Haskell 开发体验而设计的模式。 `haskell-mode` 提供了多种增强功能,旨在帮助 Haskell 开发者更高效地编写、调试和理解代码。这个模式包括以下关键特性: 1. **...

    一个简单的Haskell程序

    这个例子是关于如何编写一个简单的Haskell程序,将小写字母转换为大写字母。Haskell是一种函数式编程语言,它的核心特性包括静态类型、纯函数式编程以及惰性求值。 在尝试编写这个转换函数时,作者遇到了一些错误。...

    haskell教程

    但一旦掌握了这些,Haskell的强大功能和优雅的编程风格将使编程体验大为提升。 Haskell的起源可以追溯到1987年的函数式程序设计会议(FPCA'87),它是对B.H. Curry等人的工作致敬,B.H. Curry是函数式编程的先驱之...

    Haskell Cookbook.zip

    《Haskell Cookbook》是一本专为Haskell编程语言爱好者和开发者准备的实用指南。这本书以英文撰写,以PDF格式提供,被压缩在一个名为"Haskell Cookbook.zip"的文件中。Haskell是一种纯函数式编程语言,以其强大的...

    Real World Haskell PDF

    《Real World Haskell》是一本广泛认可的Haskell编程语言教程,旨在将这门函数式编程语言的理论与实践相结合,让读者能够在实际项目中运用Haskell。这本书的PDF版本是根据2015年3月1日的在线文档转制而成,确保了...

    HaskellDO一个Haskell代码编辑器专注于交互式开发

    HaskellDO是一款专为Haskell编程语言设计的代码编辑器,其核心特色在于提供了一个强大的交互式开发环境。Haskell是一种纯函数式编程语言,以其严谨的类型系统、高效的编译器和对数学概念的优雅表达而受到程序员的...

    Haskell 文档

    - **定义**: Haskell是一种纯函数式编程语言,以其简洁性和强大的数学模型为基础,成为研究和实际应用领域中备受推崇的语言之一。 - **特点**: 作为一种函数式语言,Haskell强调通过函数组合来构建程序,避免了状态...

    Haskell 2010 Language Report

    Haskell 2010语言报告是Haskell编程语言的一个官方文档,详细阐述了Haskell语言的规范。Haskell是一种纯函数式编程语言,它提供了强大的类型系统和高度的抽象化能力。Haskell 2010语言版本是对早期Haskell 98标准的...

    Haskell Cookbook 英文无水印pdf

    《Haskell Cookbook》是一本专为Haskell编程语言爱好者和开发者准备的实用指南。这本书以英文版的形式提供,没有水印,确保了阅读的清晰度和舒适性。Haskell是函数式编程领域的重要语言,以其纯函数、惰性求值和类型...

    HaskellPart1_Haskell_

    Haskell是一种纯函数式编程语言,以其优雅的语法、静态类型系统和强大的编译器闻名。在本课程中,我们将深入探索Haskell的基础知识,了解其核心概念,以及如何利用这些特性来编写高效、可读性强的代码。 ### 一、...

    Haskell教程(中文版)

    这本由Hal Daumé III编著并由乔海燕翻译的《Yet Another Haskell Tutorial》中文版,为初学者提供了一个深入理解Haskell的宝贵资源。下面我们将探讨Haskell的一些核心概念和知识点。 1. **函数式编程基础** 函数...

    Get Programming with HASKELL

    Get Programming with Haskell introduces you to the Haskell language without drowning you in academic jargon and heavy functional programming theory. By working through 43 easy-to-follow lessons, you'...

    Haskell编程Haskell Programming

    这是Haskell编程的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请每天检查此页面!!!

    haskell简明课件

    2. **列表操作**:列表是Haskell中的基本数据结构之一。例如,冒泡排序中的交换函数可以定义为: ```haskell swap :: [Int] -&gt; [Int] swap (x:y:rest) = y:x:rest ``` 3. **组合函数**:函数组合在Haskell中...

    Haskell_Programming

    介绍了Currying机制,这是Haskell中处理多参数函数的一种方法,它允许函数部分应用并返回新的函数。 ##### 5.6 泛型 讲解了泛型编程在Haskell中的实现方式,包括如何定义和使用泛型函数。 ##### 5.7 类型推断 解释...

    haskell趣学指南 高清

    这一环节是任何编程教程的核心部分,目的是通过编写简单的函数让学习者快速体验编程的乐趣,并对编程语言有一个直观的认识。 此外,“入门”这一节可能涉及到Haskell的基本语法结构、类型系统以及如何组织代码。...

    Learning Haskell Data Analysis

    在《学习Haskell数据分析》这本书中,作者詹姆斯·丘奇(James Church)为读者提供了一种全新的方式来理解和处理数据集。本书不仅介绍了Haskell这门编程语言的基础知识,还深入探讨了如何利用Haskell高效地分析、操作...

Global site tag (gtag.js) - Google Analytics