`
messi_18
  • 浏览: 98941 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我的第一个Haskell程序

 
阅读更多
今天下午写了一个Haskell的hello world,结果不能运行:
module test(main) where
import System.IO

data Shape = Circle Float Float Float | Rectangle Float Float Float Float
surface :: Shape -> Float
surface (Circle _ _ r) = pi * r ^ 2
surface (Rectangle a b c d) = (a-c) * (b-d)
main ::  IO()
main = do
  print $ surface $ Circle 2.2 3.0 2.5
  print $ surface $ Rectangle 1 2 4 9

编译报错
ghc -o test test.hs

test.hs:1:8: parse error on input ‘test’

貌似是因为module名字首字母要大些。
改了之后,在运行。还是有问题,这次是警告。
引用

ghc -o test test.hs
[1 of 1] Compiling Test             ( test.hs, test.o )
Warning: output was redirected with -o, but no output will be generated
because there is no Main module.

我比较了网上的hello world例子发现,和我的不同之处在于它的没有定义module。
去掉module那行试一下
引用

[1 of 1] Compiling Main             ( test.hs, test.o )
Linking test ...

这次正常了。
运行:
引用

./test
19.634954
21.0


最终版本的代码:
import System.IO

data Shape = Circle Float Float Float | Rectangle Float Float Float Float
surface :: Shape -> Float
surface (Circle _ _ r) = pi * r ^ 2
surface (Rectangle a b c d) = (a-c) * (b-d)
main ::  IO()
main = do
  print $ surface $ Circle 2.2 3.0 2.5
  print $ surface $ Rectangle 1 2 4 9
分享到:
评论

相关推荐

    无涯教程(LearnFk)-Haskell教程离线版.pdf

    作为一门纯粹的函数式编程语言,Haskell强调函数是一等公民("函数是第一类对象"),其中主要的控制结构是函数。Haskell语言的特点包括惰性求值(lazy evaluation),这意味着表达式不是立即求值,而是当结果真正...

    Haskell 编程入门五星教程

    函数式编程的核心在于函数是第一等公民,即函数可以作为参数传递,也可以作为返回值。在Haskell中,所有都是不可变的,这意味着一旦一个值被赋给变量,就不能再改变。这使得程序更易于理解和调试,因为没有副作用。...

    Haskell Cookbook.zip

    学习如何高效地操作这些数据结构,以及如何应用算法,对于编写高性能的Haskell程序至关重要。 6. 高级特性:Haskell提供了许多高级特性,如模式匹配、类型类、多态、类型家族等。理解并熟练运用这些特性能使代码...

    haskell趣学指南 高清

    接下来,“初学者的第一个函数”将引导读者编写第一个Haskell程序。这一环节是任何编程教程的核心部分,目的是通过编写简单的函数让学习者快速体验编程的乐趣,并对编程语言有一个直观的认识。 此外,“入门”这...

    Haskell 文档

    - 并行计算也是Haskell的一个亮点,利用GHC(Glasgow Haskell Compiler)的并行扩展,可以轻松编写高性能并行程序。 #### 六、Haskell的学习资源 - **参考书籍**: - **《Haskell 98 Language and Libraries》** ...

    Haskell教程(中文版)

    在Haskell中,函数是第一类公民,意味着它们可以作为参数传递,也可以作为其他函数的返回值。这种特性使得代码更易于理解和复用。此外,由于Haskell是纯函数式的,函数没有副作用,每次调用相同的输入都会得到相同的...

    Haskell Notes For Professionals

    第一章介绍了如何开始使用Haskell语言。这个入门章节可能包含了最基础的内容,比如如何在Haskell中编写一个简单的程序来输出"Hello, World!",实现一个计算阶乘的函数以及使用懒惰求值来计算斐波那契数列。除此之外...

    haskell语言教程(learn you a haskell)

    1. 第一部分可能涵盖基本语法,如变量声明、常量定义、模式匹配和基本的运算符。 2. 第二部分可能深入讲解函数、高阶函数和类型系统,包括类型类和类型推导。 3. 第三部分可能会涉及Monads,解释其工作原理和如何...

    haskell学习资料

    - 1988年,一个由多位著名研究者组成的委员会发布了Haskell的第一版定义,确立了标准的惰性函数式语言。 ### 函数程序设计简介 函数程序设计语言相对于传统的命令式语言,主要通过函数来定义输入数据与输出数据...

    Hutton A Programming in Haskell

    ##### 第1章:引言 - **函数**:介绍了函数的概念及其在Haskell中的重要性。 - **函数式编程**: - 定义:一种编程范式,程序被视为一系列表达式的计算过程。 - 特点:无副作用、可重用性高、易于理解。 - **...

    Haskell趣学指南---文字版.pdf

    第二章“从零开始”则带领读者迈出了Haskell编程的第一步,包括如何设置Haskell环境、编写第一个函数、学习列表(List)和范围(Range)的使用、列表解析(List Comprehension)和元组(Tuple)的概念。 随着学习的深入,第...

    Haskell cheat sheet

    - **分解列表**:使用 `(h:q)` 来分解列表,其中 `h` 表示列表的第一个元素,而 `q` 表示剩余的部分。 例如: ```haskell let list = [1, 2, 3, 4, 5] list !! 2 -- 3 ``` 以上内容覆盖了Haskell的基础知识和一些...

    Haskell and XML

    第一种方法利用XML文档的通用树状结构来设计处理XML的组合子库。这些组合子用于XML树的选择、生成和转换。组合子是函数编程中的一个关键概念,它们可以组合起来构建更复杂的操作,而不必关心具体实现的细节。这种...

    Real World Haskell 中文版-102116291

    第一章“入门”引导读者进入 Haskell 的世界,讲解如何设置 Haskell 开发环境。GHC(Glasgow Haskell Compiler)作为主要的 Haskell 实现,由 ghc 编译器、ghci 解释器和 runghc 脚本运行程序三部分组成。ghci 提供...

    Yet Another Haskell Tutorial

    《Yet Another Haskell Tutorial》是一份详尽的指南,旨在为初学者提供全面的Haskell编程语言入门。Haskell是一种在编程领域中具有独特地位的语言,它被定义为一种懒惰的、纯函数式编程语言。这份教程由Hal Daume ...

    haskell学习最新资源:Beginning Haskell

    第二章“Declaring the Data Model”(声明数据模型)教授如何在Haskell中定义类型和数据结构,这是构建任何Haskell程序的基础。第三章“Reusing Code Through Lists”(通过列表重用代码)讲解了Haskell中列表的...

    Haskell High Performance Programming

    在高性能编程中,识别性能瓶颈是至关重要的第一步。这一章深入探讨了Haskell中的多种技术来帮助开发者理解并优化代码的执行效率。 - **懒惰求值**:Haskell的默认求值策略是延迟计算,这在某些情况下可以带来性能...

Global site tag (gtag.js) - Google Analytics