我需要創建一個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告訴我)。 –