轨道
/
Clojure
Clojure
/
练习
/
Tracks on Tracks on Tracks
Tracks on Tracks on Tracks

Tracks on Tracks on Tracks

学习练习

简介

在 Clojure 中,列表是一种集合,就像其他语言中的列表一样。与 Lisp 家族中的其他语言类似,Clojure 使用圆括号来表示列表。

创建列表有两种方式:可以用list函数创建列表,也可以对一个字面量列表使用quote。

列表之所以特殊,是因为 Clojure 会把它们当作_调用_来处理。它要求调用以一个_运算符_开头,这个运算符通常是一个函数。列表中其余的项则被视为_操作数_,也就是会成为该函数的实参。

Clojure 对列表的这种特殊处理,正是我们无法直接创建列表字面量的原因。使用quote或其简写'来引用列表,表示这个列表不应被求值。

与一些现代语言不同,Clojure 的列表是_异构的_,也就是说它们内部可以包含多种类型的项,例如'(2 "a" "b" 3)。 与其他 Lisp 不同,Clojure 中的空列表被视为真,并不等同于nil或false。

说明

在这个练习中,你将编写代码来处理一个编程语言数组,这些语言是你打算在 Exercism 平台上练习的。

你需要完成六个任务。

1. 创建一个新数组

在添加语言之前,你需要先创建一个新数组。定义一个返回空数组的函数。

(new-list)
;; => ()

2. 向数组中添加一门新语言

当你在 Exercism 上浏览并发现自己想学的语言时,你需要能把它们添加到数组中。定义一个函数,把一门新语言添加到数组的开头。

(add-language '("Clojurescript") "JavaScript")
;; => '("JavaScript" "Clojurescript")

3. 查看最后添加的语言

你会想快速查看自己刚刚添加的是哪门语言。定义一个函数,返回数组中的第一门语言。

(first-language '("Haskell" "Python"))
;; => "Haskell"

4. 从数组中移除第一门语言

有时你会对刚添加的语言改变主意。定义一个函数,从数组中移除第一门语言。

(remove-language '("Common Lisp" "Racket" "Scheme"))
;; => '("Racket" "Scheme")

5. 统计数组中的语言数量

逐个统计语言很不方便。定义一个函数,统计数组中语言的数量。

(count-languages '("C#" "Racket" "Rust" "Ruby"))
;; => 4

6. 把所有内容组合起来

定义一个 learning-list 函数,并在其中使用上面定义的部分函数。

  • 创建一个空数组

  • 向数组中添加 2 门新的编程语言。

    • “Clojure”
    • “Lisp”
  • 从数组中移除 “Lisp”,因为你可能这一年没有足够的时间,而且它与 Clojure 非常相似。

  • 再向数组中添加 2 门编程语言。

    • “Java”
    • “JavaScript”
  • 返回语言的总数。提示:应该是 3。

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

准备好开始 Tracks on Tracks on Tracks 了吗?

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