今天下午写了一个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
分享到:
相关推荐
作为一门纯粹的函数式编程语言,Haskell强调函数是一等公民("函数是第一类对象"),其中主要的控制结构是函数。Haskell语言的特点包括惰性求值(lazy evaluation),这意味着表达式不是立即求值,而是当结果真正...
函数式编程的核心在于函数是第一等公民,即函数可以作为参数传递,也可以作为返回值。在Haskell中,所有都是不可变的,这意味着一旦一个值被赋给变量,就不能再改变。这使得程序更易于理解和调试,因为没有副作用。...
学习如何高效地操作这些数据结构,以及如何应用算法,对于编写高性能的Haskell程序至关重要。 6. 高级特性:Haskell提供了许多高级特性,如模式匹配、类型类、多态、类型家族等。理解并熟练运用这些特性能使代码...
接下来,“初学者的第一个函数”将引导读者编写第一个Haskell程序。这一环节是任何编程教程的核心部分,目的是通过编写简单的函数让学习者快速体验编程的乐趣,并对编程语言有一个直观的认识。 此外,“入门”这...
在Haskell中,函数是第一类公民,意味着它们可以作为参数传递,也可以作为其他函数的返回值。这种特性使得代码更易于理解和复用。此外,由于Haskell是纯函数式的,函数没有副作用,每次调用相同的输入都会得到相同的...
第一章介绍了如何开始使用Haskell语言。这个入门章节可能包含了最基础的内容,比如如何在Haskell中编写一个简单的程序来输出"Hello, World!",实现一个计算阶乘的函数以及使用懒惰求值来计算斐波那契数列。除此之外...
1. 第一部分可能涵盖基本语法,如变量声明、常量定义、模式匹配和基本的运算符。 2. 第二部分可能深入讲解函数、高阶函数和类型系统,包括类型类和类型推导。 3. 第三部分可能会涉及Monads,解释其工作原理和如何...
- 1988年,一个由多位著名研究者组成的委员会发布了Haskell的第一版定义,确立了标准的惰性函数式语言。 ### 函数程序设计简介 函数程序设计语言相对于传统的命令式语言,主要通过函数来定义输入数据与输出数据...
##### 第1章:引言 - **函数**:介绍了函数的概念及其在Haskell中的重要性。 - **函数式编程**: - 定义:一种编程范式,程序被视为一系列表达式的计算过程。 - 特点:无副作用、可重用性高、易于理解。 - **...
- **分解列表**:使用 `(h:q)` 来分解列表,其中 `h` 表示列表的第一个元素,而 `q` 表示剩余的部分。 例如: ```haskell let list = [1, 2, 3, 4, 5] list !! 2 -- 3 ``` 以上内容覆盖了Haskell的基础知识和一些...
第一种方法利用XML文档的通用树状结构来设计处理XML的组合子库。这些组合子用于XML树的选择、生成和转换。组合子是函数编程中的一个关键概念,它们可以组合起来构建更复杂的操作,而不必关心具体实现的细节。这种...
第一章“入门”引导读者进入 Haskell 的世界,讲解如何设置 Haskell 开发环境。GHC(Glasgow Haskell Compiler)作为主要的 Haskell 实现,由 ghc 编译器、ghci 解释器和 runghc 脚本运行程序三部分组成。ghci 提供...
第二章“从零开始”则带领读者迈出了Haskell编程的第一步,包括如何设置Haskell环境、编写第一个函数、学习列表(List)和范围(Range)的使用、列表解析(List Comprehension)和元组(Tuple)的概念。 随着学习的深入,第...
《Yet Another Haskell Tutorial》是一份详尽的指南,旨在为初学者提供全面的Haskell编程语言入门。Haskell是一种在编程领域中具有独特地位的语言,它被定义为一种懒惰的、纯函数式编程语言。这份教程由Hal Daume ...
第二章“Declaring the Data Model”(声明数据模型)教授如何在Haskell中定义类型和数据结构,这是构建任何Haskell程序的基础。第三章“Reusing Code Through Lists”(通过列表重用代码)讲解了Haskell中列表的...
在高性能编程中,识别性能瓶颈是至关重要的第一步。这一章深入探讨了Haskell中的多种技术来帮助开发者理解并优化代码的执行效率。 - **懒惰求值**:Haskell的默认求值策略是延迟计算,这在某些情况下可以带来性能...