轨道
/
Elm
Elm
/
练习
/
马里奥的美味千层面
马里奥的美味千层面

马里奥的美味千层面

学习练习

简介

Let

let表达式用于创建局部作用域,在以下几种情况下很有用:

  • 简化表达式
  • 为中间表达式的结果命名
  • 在表达式变得很大时,把它拆分成更小的部分

在let表达式里,你几乎可以做任何事,包括解构(后续练习会详细介绍),但不能定义新的自定义类型或类型别名。

let
  cube x = x * x * x
in
  cube a + cube b + cube c
beginWithPattern : Size -> Padding -> Pattern -> GameOfLife
beginWithPattern minimumSize padding pattern =
    let
        size = calculateSize minimumSize padding pattern

        center = Size.center size

        centeredPattern = Pattern.centerAt center pattern

        dimensions = { width = size, height = size }

        deadCells = Matrix.create dimensions Dead
    in
    GameOfLife (bringPatternToLife deadCells centeredPattern)

说明

你生日时收到了一本新食谱,你想看看里面的千层面食谱是不是比你目前最喜欢的食谱更好。在这个练习里,你要写一些代码,帮助你按照新食谱做千层面。

你的室友还在办公室忙着,她想知道千层面什么时候能做好,好确保自己来得及赶回来。

1. 算出千层面什么时候能做好

创建一个函数,算出千层面什么时候能做好。为了让代码既简洁又有表现力,你应该使用let表达式。

定义remainingTimeInMinutes函数,它接收两个形参,并以一个 let 表达式作为函数体。第一个形参是千层面的层数,第二个形参是你开始烹饪后经过的分钟数。

在let表达式的let部分中定义expectedMinutesInOven,用来检查千层面应该在烤箱里烤多少分钟。根据食谱,预计的烤箱时间是 40 分钟:

expectedMinutesInOven
    --> 40

在let表达式的let部分中定义preparationTimeInMinutes,它接收千层面的层数作为形参,并返回准备千层面需要多少分钟,假设每一层需要 2 分钟来准备。

preparationTimeInMinutes 3
    --> 6

返回千层面做好前还剩多少分钟(在let表达式的in部分中),它等于preparationTimeInMinutes与expectedMinutesInOven之和,减去你开始烹饪后经过的分钟数。

remainingTimeInMinutes 3 10
    --> 6 + 40 - 10 = 36
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Elm Exercism

准备好开始 马里奥的美味千层面 了吗?

注册 Exercism,借助 28 个概念110 个练习 和真人导师指导,学习并掌握 Elm,全部免费。