2012-11-18 48 views
4

我嘗試創建一個與two arguments x and y創建一個功能,它創建一個list of y times repeated elements X但即時通訊如何做到這一點或使用哪種方法,我認爲列表壓縮可以做但我想要一個更簡單的方法例如,我想我的簡單代碼是這樣的重複共同lisp的元素

if y = 4 
and x = 7 
result is list of elements (7, 7, 7, 7) 

我怎麼能去任何想法?書籍的鏈接或任何會給我一個線索我試圖尋找,但我沒有被幸運

回答

1

試試這個,它的方案,但總體思路應該是很容易轉化爲Common Lisp的:

(define (repeat x y) 
    (if (zero? y) 
     null 
     (cons x 
      (repeat x (sub1 y))))) 

編輯:現在

,Common Lisp中:

(defun repeat (x y) 
    (if (zerop y) 
     nil 
     (cons x 
      (repeat x (1- y))))) 
+0

如果'if'的某個結果無論如何都是'nil',那麼對於我來說,否定條件就會更清晰,並且只留下第二個(「else」)參數,該參數默認爲'nil' if未指定:'(if(not(zerop y))(cons x(repeat x(1- y))))'。 –

+0

@MarkReed我不喜歡單手武裝的「if」。他們被禁止在球拍上有充分的理由;) –

18

您可以使用make-list初始元素鍵:

CL-USER> (make-list 10 :initial-element 8) 
    (8 8 8 8 8 8 8 8 8 8) 

雖然你怎麼可以自己編寫這樣的功能一個很好的例子是奧斯卡的答案提供。

+0

這應該是公認的答案 – fpg1503