什么扩展允许访问 r5rs 中的时间功能?

What extension allows access to time function in r5rs?

A 4-year-old old post 建议可以使用 r5rs 语言访问当前秒数和相关函数。

这就是我问的原因:我是一名刚接触 Racket 的高中老师,我们使用的是 r5rs 语言。我想从一个不需要参数就有意义的函数开始向学生介绍函数。我想到的例子是整点过几分钟。但是我不知道如何在 r5rs 程序中识别这些函数。

感谢任何有用的建议。

首先,为什么不用#lang racket代替r5rs呢? Racket 非常注重教育。它甚至有多种教学语言供 How to Design Programs textbook (or its second edition 使用,目前仍在开发中)。


Racket 对 R5RS 的实现是有意限制的——它通常不打算用于任何实际的用途,因为 Racket 本身已经超越了它的 Scheme 根源。它可以用作教学工具,但如您所见,它不包含任何特殊扩展(除了一小部分内部表单之外)。

如果您真的对使用 R5RS Scheme 感兴趣,可以使用与 Racket 捆绑在一起的 SRFI 19: Time Data Types and Procedures 实现。 R5RS 没有模块系统,因此在纯 Scheme 中没有正式指定的加载外部库的方式。您需要使用 Racket #%require 扩展来加载 SRFI 实现:

(#%require srfi/19)

这将使您能够访问所有 SRFI 19 函数和值。

你也可以只包含你想要的 Racket 本身的功能,因为这些语言实际上是可以互操作的。要包含 current-seconds,您需要执行以下操作:

(#%require (only racket/base
                 current-seconds))

不过,如果您要这样做,那么使用 r5rs 语言似乎毫无意义。只需使用 racketracket/base 即可。