2017-05-08 47 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

你的。代码也可能会取代第三个相同的值。 –