Scheme 方案-将数字转换为字母

Scheme 方案-将数字转换为字母,scheme,racket,alphabet,Scheme,Racket,Alphabet,我想创建一个程序,允许我将给定的数字I转换为字母表中的第I个字符 例如: (toChar 4) -> d (toInt d) -> 4 字母表的实现似乎是可行的。然而,这似乎是非常低效的,因为你将不得不循环通过字母表,直到你得到你要找的数字 这能以更简洁的方式完成吗? 文档的这一部分非常清楚地解释了这一点 因此,您可以执行以下操作: > (char->integer #\a) 97 > (char->integer #\b) 98 > (char-&g

我想创建一个程序,允许我将给定的数字I转换为字母表中的第I个字符

例如:

(toChar 4) -> d
(toInt d) -> 4
字母表的实现似乎是可行的。然而,这似乎是非常低效的,因为你将不得不循环通过字母表,直到你得到你要找的数字

这能以更简洁的方式完成吗?

文档的这一部分非常清楚地解释了这一点

因此,您可以执行以下操作:

> (char->integer #\a)
97
> (char->integer #\b)
98
> (char->integer #\A)
65
使用此功能,您可以使用如下所示的功能:

(define (to-letter n)
  (let ((charnum (+ n 96)))
    (integer->char charnum)))

(define (to-int c)
  (let ((charnum (char->integer c)))
    (- charnum 96)))

> (to-int (to-letter 1))
1
确保检查边界等

编辑
为了更符合给定SO问题的精神,您可以将字符存储在数组中,然后进行O(1)索引。

感谢您的快速回答!这是特定于Racket的,还是在其他方案实现中有效?你是对的!我刚刚意识到它在R6RS规范中。