2012-10-27 50 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

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