我需要创建一个接收列表和所需新大小的方案函数,然后该函数使用相同的列表值扩展列表大小。例如:
'(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)
新的长度函数参数可以等于或大于当前列表大小。
您可以使用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))))