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

Lucian 的美味千层面

学习练习

简介

在 Clojure 中,把一个值绑定到一个名字上称为 变量。顶层(全局)变量与其他语言中的常量类似。

使用def定义顶层变量:

(def fingers 10)

fingers
;;=> 10

你可以用defn定义接受零个或多个实参的函数。下面这个函数把 2 个数字相加:

(defn add [x y]
  (+ x y))

这个函数接受 2 个实参,它们放在向量[x y]中,接着是函数的 函数体,函数体可以包含任意数量的表达式。返回值始终是求值函数体中最后一个表达式 (+ x y) 的结果。这个表达式是一个表示函数调用的列表。列表的第一项是+函数,它把后面的项x和y作为实参来求值。

上面定义的add函数用同样的方式调用:

(add 2 3)
;;=> 5

Clojure 中的函数和值只能在定义 之后 使用,也就是说,形式总是按它们出现的顺序求值。

在 Clojure 中,空白除了用于排版之外没有任何意义。

Clojure 的函数和变量按命名空间组织。命名空间把相关的功能归为一组,使用ns宏定义:

(ns calculator)

(def pi 3.14)

(defn add [x y]
  (+ x y))

Clojure 支持两种注释。单行注释以;开头,而comment形式用于阻止对(comment和)之间所有内容的求值。

说明

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

一共有四个任务,都与做千层面所花的时间有关。

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

定义expected-time变量,用来表示千层面需要在烤箱里烤多少分钟。根据烹饪书,预期的烤箱时间是 40 分钟:

expected-time
;;=> 40

2. 计算剩余的烤箱时间(分钟)

定义remaining-time函数,它接收千层面已经在烤箱里烤了多少分钟作为实参,并根据上一个任务中得出的预期烤箱时间,返回千层面还需要在烤箱里烤多少分钟。

(remaining-time 30)
;;=> 10

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

定义prep-time函数,它接收你往千层面里加的层数作为实参,并返回你准备千层面花了多少分钟,假设每加一层需要 2 分钟。

(prep-time 2)
;;=> 4

4. 计算总工作时间(分钟)

定义total-time函数,它接收两个实参:第一个实参是你往千层面里加的层数,第二个实参是千层面已经在烤箱里烤了多少分钟。这个函数应该返回你烹饪千层面总共花了多少分钟,也就是准备时间的分钟数加上千层面此刻在烤箱里已经烤的分钟数。

(total-time 3 20)
;;=> 26
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Clojure Exercism

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

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