我正在学习Racket只是为了好玩。 我有一个问题。有没有办法扭转sequence?一种用于反转诸如以下内容的通用函数:
(sequence-reverse "Hello")
(sequence-reverse '(1 2 3))
答案 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->vector
和vector->list
提供类似的功能。但是,您可能不希望所有序列都具有全面功能。反转哈希表或字典并没有多大意义。
答案 1 :(得分:3)
问题是某些序列是无限的,例如(in-integers)
给出的序列。对于有限序列,您可以使用:
(define (sequence-reverse s)
(reverse
(sequence->list s)))