-1

我需要创建一个接收列表和所需新大小的方案函数,然后该函数使用相同的列表值扩展列表大小。例如:

'(1 2 3) to size 6 will turn to '(1 2 3 1 2 3)
'(1 2) to size 5 will turn to '(1 2 1 2 1)
'(4 5 6 1) to size 7 will turn to '(4 5 6 1 4 5 6)

新的长度函数参数可以等于或大于当前列表大小。

4

1 回答 1

0

您可以使用SRFI 1功能circular-list(与 Racket 的内置功能一起take)来执行此操作:

(require srfi/1)
(define (take-circular lst n)
  (take (apply circular-list lst) n))

如果你想避免使用 SRFI 1,另一种方法是这样的:

(define (take-circular lst n)
  (let ((size (length lst)))
    (if (> n size)
        (append lst (take-circular lst (- n size)))
        (take lst n))))
于 2012-10-27T13:18:09.250 回答