你如何在 Racket 中反转序列?

How do you reverse a sequence in Racket?

我学习 Racket 只是为了好玩。 我有一个问题。有没有办法反转 sequence?一种用于反转事物的通用函数,例如:

(sequence-reverse "Hello")
(sequence-reverse '(1 2 3))

没有内置函数可以执行您想要的操作。如果您只关心字符串和列表,请尝试这样的操作:

(define (sequence-reverse seq)
    (cond ((null? seq) seq)
          ((list? seq) (reverse seq))
          ((string? seq) (list->string (reverse (string->list seq))))
          (error "Bad sequence")))

您可以根据需要添加其他条件 - 例如向量通过函数 list->vectorvector->list 提供类似的功能。不过,您可能不希望所有序列都具有一揽子功能。反转散列 table 或字典没有任何意义。

问题是有些序列是无限的,例如 (in-integers) 给出的序列。对于有限序列,您可以使用:

(define (sequence-reverse s)
  (reverse
    (sequence->list s)))