使用相同的列表值扩展Scheme列表

时间:2012-10-27 13:05:46

标签: list scheme racket

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

'(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)

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

1 个答案:

答案 0 :(得分: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))))