用 Haskell 求解 ACM 竞赛题(1):Hello,World!

找了一本用C语言编写的ACM竞赛教程,把其中的程序用 Haskell 重写一遍,这可能是熟悉 Haskell 的最好办法。首先我们看一看 Hello 程序如何实现。如果有 C 语言基础,应该很容易理解 Haskell 代码。

Hello, world

main = do
    putStrLn "Hello, world!"

代码相当简单吧。其中 putStrLn 相当于 C 语言的 printf。
其中:

  • putStr “字符串”:显示字符串,不换行
  • putStrLn “字符串”:显示字符串,换行

算术表达式

计算机的“本职”工作是计算, 因此下面先从算术运算入手,看看如何用计算机进行复杂的计算。

程序 1-1 计算并输出 1 + 2 的值

C 语言代码:

#include< stdio.h>
int main() {
	printf("% d\ n", 1+ 2); 
	return 0; 
}

这是一段简单的程序,用于计算 1+ 2 的 值, 并把 结果 输出 到 屏幕。Haskell 程序如下:

main = do
    return (1 + 2)

当然也可以写成这种形式:

main = do
    putStrLn (show (1 + 2))

其中:

  • show 数字 : 把数字转换成字符串

程序 1- 2   计算并输出 8/ 5 的 值, 保留小数点后 1 位

C 语言代码:

#include< stdio.h> 
int main() { 
	printf("%. 1f\ n", 8. 0/ 5. 0); 
	return 0; 
}

Haskell 语言代码:

main = do
    putStrLn (show ((fromIntegral (floor (8.0/5.0*10.0+0.5))) / 10.0))

其中:

  • fromIntegral 整数:用于把整数转化为浮点数。因为 Haskell 对数据类型检查很严格,不会把整数自动转化为浮点数的,必须用 fromIntegral 显式作数据转换。这样做的好处,可以减少程序设计的错误。

C 语言中很简单的问题在 Haskell 中貌似复杂了很多。其实,如果 C 语言库函数中没有事先提供 printf 函数的话也很麻烦。我们会看到 C 语言和 Haskell 各有所长,很多情况下,Haskell 种很简单的事情,C 语言实现起来却繁琐的很。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许野平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值