你如何在 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->vector
和 vector->list
提供类似的功能。不过,您可能不希望所有序列都具有一揽子功能。反转散列 table 或字典没有任何意义。
问题是有些序列是无限的,例如 (in-integers)
给出的序列。对于有限序列,您可以使用:
(define (sequence-reverse s)
(reverse
(sequence->list s)))
我学习 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->vector
和 vector->list
提供类似的功能。不过,您可能不希望所有序列都具有一揽子功能。反转散列 table 或字典没有任何意义。
问题是有些序列是无限的,例如 (in-integers)
给出的序列。对于有限序列,您可以使用:
(define (sequence-reverse s)
(reverse
(sequence->list s)))