Scheme 如何在球拍中倒转顺序?

Scheme 如何在球拍中倒转顺序?,scheme,racket,Scheme,Racket,我学球拍只是为了好玩。 我有个问题。有没有办法扭转这种局面?一种通用函数,用于反转以下内容: (sequence-reverse "Hello") (sequence-reverse '(1 2 3)) 没有内置的函数来执行您想要的操作。如果您只关心字符串和列表,请尝试以下操作: (define (sequence-reverse seq) (cond ((null? seq) seq) ((list? seq) (reverse seq)) (

我学球拍只是为了好玩。 我有个问题。有没有办法扭转这种局面?一种通用函数,用于反转以下内容:

(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
提供类似的功能。不过,您可能不希望所有序列都具有覆盖功能。反转哈希表或字典实际上没有意义。

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

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

谢谢你的意见。但我相信你提供的答案对字符串不起作用。我正在寻找一个内置的东西,它可以在
序列?
合同提供者上工作。
(反向)(abc))
我也想过,但是
反向
只适用于列表。在Racket中,使用列表可以吗?(由于不可变的conses,它只需要O(1)个摊销时间)。如果我错了,请纠正我,但我认为Racket中没有list->sequence函数。这可能就是Racket没有为表单反转
的原因。@wickstopher你是对的!我忘记了“序列”只是指“列表、向量、流等”。我更改了上面的定义以返回一个列表(这是序列的一个示例)。如果原始海报需要一个与结果类型相同的序列,他应该使用你的解决方案。有趣的是,这个解决方案不适用于哈希,尽管它们有一个哈希->列表函数。我认为在整数中使用
,你的意思是在自然中使用
在整数中使用
没有起点P