2012-10-27 36 views
-1

我需要创建一个Scheme函数来接收一个列表和一个所需的新大小,然后函数通过使用相同的列表值来扩展列表大小。例如:使用相同的列表值扩展一个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) 

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

+2

这是功课吗? –

+0

排序,这是我在学校的一个项目,它只是一些更大的东西的一小部分。 –

+1

在这种情况下,您可能希望使用标准的球拍语言,而不是漂亮大号。后者很不合时宜(或者Eli Barzilay告诉我)。 –

回答

0

可以使用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)))) 
+0

谢谢。我实际上不能使用SRFI 1,所以我尝试了第二个编码,但它不起作用。首先它说'take'这个词是不确定的,所以我将它改为'circular-list',现在程序陷入了无限循环。 –

+0

您在Racket中使用哪种语言?如果您使用标准的球拍语言('#lang racket'),则定义“take”。 –

+0

哦,我真的忘了提到,对不起。我使用的语言很大。 –