2017-05-08 45 views
-3

我在lisp編程中很新,所以也許這是一個愚蠢的問題,但無論如何,我有一個數字列表(6000 6100 6200 6200 7200等),我想查找和替換第二個相同的值(將1200加到第二個相同的值),所以結果應該是(6000 6100 6200 7400 7200)。你能幫助我嗎?非常感謝你。common lisp - 在列表中替換相同的值

+3

那你試試這麼遠嗎? –

+0

- 試圖用一個原始列表和一個移動列表構造一個循環,而不是一些使用lambda獲得t/nil模式的mapcar,但是 - 沒有達到工作結果。 – user7980164

+0

向我們顯示您的代碼,並從那裏我們可能能夠指出你在正確的方向 – sorifiend

回答

-1

老實說,我不明白爲什麼falk會低估這個問題。雖然這不是一個有趣的問題,但它是一個明確的問題。對於那裏的學生來說,讓我把它概括一下,試圖讓它更有趣。我是新來的lisp,我需要將一個函數應用到列表中。函數的輸出不僅取決於當前元素,還取決於前一個和/或後續元素,最佳構造是什麼?

我認爲最簡單的就是使用loop

(defun nahrad (list change) 
    (loop for f = nil then s 
     for s in list 
     collect (if (eql f s) (+ change s) s))) 

(defparameter *test* '(6000 6100 6200 6200 7200)) 

(nahrad *test* 1200) 
+0

這不會找到第二個相同的值。 *查找*通常意味着搜索操作, –

+0

您的代碼也會執行多項更改。這個問題談到「第二個同樣的價值」,這是單數。它並沒有說'every'。 –

+0

你的。代碼也可能會取代第三個相同的值。 –