你如何扭转Racket中的序列?

时间:2015-03-08 15:50:24

标签: scheme racket

我正在学习Racket只是为了好玩。 我有一个问题。有没有办法扭转sequence?一种用于反转诸如以下内容的通用函数:

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

2 个答案:

答案 0 :(得分: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提供类似的功能。但是,您可能不希望所有序列都具有全面功能。反转哈希表或字典并没有多大意义。

答案 1 :(得分:3)

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

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