轨道
/
Haskell
Haskell
/
练习
/
Lucian 的美味千层面
Lucian 的美味千层面

Lucian 的美味千层面

学习练习

简介

常量和函数

Haskell 程序由定义和表达式组成。

常量值用name = expression定义。

five = 5

six = 3 + 3

函数用name parameters... = expression定义,其中的参数只用空格分隔。

add number1 number2 = number1 + number2

调用函数也是一种表达式,写出函数名,并为函数的每个形参依次传入实参,用空格分隔,和定义函数时一样。

five = add 2 3

可以用括号来指定表达式的求值顺序。

six = add 2 (1 * 4)

twelve = add 2 1 * 4

缩进 / 有意义的空白

Haskell 使用空白和缩进来界定代码的边界。 属于某个表达式的代码,缩进必须比该表达式的起始位置更靠右。

  • 模块、导入语句和顶层函数定义必须从最左边的一列开始。
  • 如果表达式被拆成多行,属于该表达式的代码必须缩进到该表达式之下,并且至少缩进一个空格。
  • 归为同一组的表达式各部分,应缩进相同数量的空格。
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
    number1 + number2

https://en.wikibooks.org/wiki/Haskell/Indentation

模块

模块会导出函数。 也就是说,你可以使用模块在其导出语句中公开的函数。 模块也可以定义仅供内部使用的函数。 默认情况下,没有显式导出的函数不能在模块外部使用。

在模块的开头,我们要指定模块名。 如果文件叫 Calculator.hs,那么模块就应该命名为 Calculator。 接着指定它导出的函数,之后就可以开始写这些函数了。 所以我们从下面这行开始。

module Calculator ( add ) where

https://learnyouahaskell.github.io/modules#making-our-own-modules

注释

注释是 Haskell 文件中的一些文本,不会被当作代码解释。 它主要是给你自己和其他程序员阅读的。 单行注释有一种轻量的写法,基于两个连字符。 多行注释也可以用 {- 和 -} 这一对起止分隔符来实现。

-- a single line comment
-- another single line comment

{- a multiline comment
   spanning multiple lines
-}

致谢

本练习的简介大量参考了 Learn You a Haskell for Great Good!,依据 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 使用。

说明

在这个练习中,你将编写一些代码,帮你照着最喜欢的烹饪书做出一份美味的千层面。

你有三个任务,它们都和烹饪千层面所花的时间有关。

1. 定义烤箱的预期时间(分钟)

定义expectedMinutesInOven常量,用来检查千层面应该在烤箱里烤多少分钟。根据烹饪书,预期的烤箱时间是 40 分钟:

expectedMinutesInOven
    --> 40

2. 计算准备时间(分钟)

定义preparationTimeInMinutes函数,它接受你加到千层面里的层数作为形参,并返回你准备这份千层面所花的分钟数。假设每铺一层需要 2 分钟。

preparationTimeInMinutes 3
    --> 6

3. 计算已用时间(分钟)

定义elapsedTimeInMinutes函数,它接受两个形参:第一个形参是你加到千层面里的层数,第二个形参是千层面已经在烤箱里烤了多少分钟。该函数应返回你在烹饪这份千层面上花掉的分钟数,也就是准备时间加上千层面此刻在烤箱里已用的时间。

elapsedTimeInMinutes 3 20
    --> 26
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Haskell Exercism

准备好开始 Lucian 的美味千层面 了吗?

注册 Exercism,借助 107 个练习 和真人导师指导,学习并掌握 Haskell,全部免费。