作业 0.2
第 0.2 课课后作业:Racket 表达式、词句处理、谓词、不定冠词等 8 道练习。
模板
在终端输入下面的命令,把模板文件复制到当前目录(注意末尾的句点):
cp ~cs61as/autograder/templates/hw0-2.rkt .
或者,你可以从这里下载模板。
自动评分器
如果你在实验机房里做作业,grader 命令会运行自动评分器。如果你在自己的个人电脑上做,你需要下载 grader.rkt 和 hw0-2-tests。
练习 0
表达式 (+ 8 2) 的值是 10。它是一个由三个原子组成的复合表达式。对这个练习,请写出另外五个值同样为 10 的 Racket 表达式:
- 一个原子
- 另一个由三个原子组成的复合表达式
- 由四个原子组成的复合表达式
- 由一个原子和两个复合子表达式组成的复合表达式
- 任何其他种类的表达式
练习 1
我们来构建一些处理词和句子的函数。上一个实验中的 second 过程会提供给你。你也许会觉得 word 函数有用。
- 写一个过程
first-two,接收一个词作为实参,返回由实参前两个字母组成的双字母词。 - 写一个过程
two-first,接收两个词作为实参,返回由这两个实参首字母组成的双字母词。 - 再写一个过程
two-first-sent,接收一个双词句子作为实参,返回由这两个词首字母组成的双字母词。
-> (first-two 'ambulatory)
'am
-> (two-first 'brian 'epstein)
'be
-> (two-first-sent '(brian epstein))
'be
练习 2
写一个谓词 teen?,如果实参在 13 到 19 之间(含两端)则返回 #t。
-> (teen? 19)
#t
-> (teen? (/ 39 2))
#f
练习 3
写一个过程 indef-article,只接收一个词作为实参,返回一个句子。关于 indef-article 应该怎么工作,见下面的例子。记住,以辅音开头的事物的不定冠词是 “a”,以元音开头的是 “an”。你可以忽略任何边缘情况。
-> (indef-article 'beetle)
'(a beetle)
-> (indef-article 'apple)
'(an apple)
练习 4
写一个过程 insert-and,接收一个由若干元素组成的句子,返回一个新句子,在语法正确的位置插入 and。
-> (insert-and '(john bill wayne fred joey))
'(john bill wayne fred and joey)
练习 5
写一个过程 query,把陈述句变成疑问句:交换前两个词的位置,并在最后一个词的末尾加上问号。你可以忽略任何边缘情况。
-> (query '(you are experienced))
'(are you experienced?)
-> (query '(i should have known better))
'(should i have known better?)
-> (query '(you were there))
'(were you there?)
练习 6
写一个过程 european-time,把美式 AM/PM 记法的时间转换成欧式 24 小时记法。再写一个 american-time,实现相反的转换。
-> (european-time '(8 am))
8
-> (european-time '(4 pm))
16
-> (european-time '(12 am))
0
-> (american-time 21)
'(9 pm)
-> (american-time 12)
'(12 pm)
练习 7
写一个过程 describe-time,接收一个秒数作为实参,返回对这段时间更有用的描述。假设一年有 365.25 天。你只需要考虑到一天以内的时间段。
-> (describe-time 45)
'(45 seconds)
-> (describe-time 930)
'(15.5 minutes)
注意
你可能会注意到,Racket 处理整数除法的方式有点奇怪:
-> (/ 1 2)
1/2
你可以在一个或多个实参中使用小数点,强制 Racket 返回带小数点的数(即浮点数):
-> (/ 1.0 2)
0.5
练习 8
下面的程序不能工作。为什么?修复它并解释原因。
(define (superlative adjective word)
(se (word adjective 'est) word))
superlative 应该这样工作:
-> (superlative 'dumb 'exercise)
'(dumbest exercise)
提交作业!
相关说明请参见这份指南。它涵盖基本终端命令和作业提交。
提交时如有任何困难,请随时向助教请教!