我需要创建一个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)
新长度函数参数可以等于或大于当前列表大小。
我需要创建一个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)
新长度函数参数可以等于或大于当前列表大小。
可以使用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))))
谢谢。我实际上不能使用SRFI 1,所以我尝试了第二个编码,但它不起作用。首先它说'take'这个词是不确定的,所以我将它改为'circular-list',现在程序陷入了无限循环。 –
您在Racket中使用哪种语言?如果您使用标准的球拍语言('#lang racket'),则定义“take”。 –
哦,我真的忘了提到,对不起。我使用的语言很大。 –
这是功课吗? –
排序,这是我在学校的一个项目,它只是一些更大的东西的一小部分。 –
在这种情况下,您可能希望使用标准的球拍语言,而不是漂亮大号。后者很不合时宜(或者Eli Barzilay告诉我)。 –