使用相同的列表值扩展方案列表



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

'(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(与球拍的内置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))))