racket - DrRacket - 字母的数字等价物
问题描述
我正在编写一个函数,将每个字母替换为稍后在字母圈周围恰好 13 个空格处找到的字母,并使非字母字符保持不变。对于字母 AN 和 an,我只需要将 13 加到相应的整数上,然后将其转换为字符。这就是让我感到困惑的地方——对于字母NZ和nz,解码后对应的整数应该减去13,我不知道如何写问题表达式。我试过使用 char<=? 和字符> =?但有错误。
(define (rot-13 msg)
(list->string (list-rot-13 (string->list msg))))
(define (list-rot-13 loc)
(cond
[(empty? loc) empty]
[else
(cons (convert-char (first loc)) (list-rot-13 (rest loc)))]))
(define (convert-char c)
(cond
[... (integer->char (- (char->integer c) 13))]
[... (integer->char (+ (char->integer c) 13))]
[else c])
解决方案
您可以使用char-ci>=?
. 例如。
(char-ci>=? #\l #\n) ; ==> #f
(char-ci>=? #\n #\n) ; ==> #t
(char-ci>=? #\p #\n) ; ==> #t
现在与数字char>=?
相同>=
,并且(char>=? #\A #\b) ; ==> #t
。ci
代表不区分大小写的 so (char>=? #\A #\b) ; ==> #f
。
PS:我认为你只能使用一个谓词,它可以使用 just if
。它要么等于或大于,#\n
要么不是。您还可以if
通过始终添加来执行内部数学运算(integer->char (+ (char->integer c) (if (char-ci>=? ...) -13 13))
推荐阅读
- javascript - 如何安全地将 node.js 从 5.9.1 升级到 6.14.0?
- java - Spring Boot / @Transactional 在独立模式下工作,但不在 Glassfish 中
- python - 在 cv2 中使用 skimage 图像
- c# - 如何使用 C# 从 Visual Studio 中的标准控制台读取输出
- swift - 无法在swift 4中将时间戳日期转换为字符串
- python - pandas.read_fwf 忽略提供的 dtypes
- ajax - ajax请求中显示为“0:”的参数
- json - 使用 json 模式在 pyspark 中处理 REST 调用的更好方法
- c++ - 如何让递归函数输出数字并从f(0)开始并让f(n)向上计数
- ios - 如何从 XIB-Instance 访问视图