访问方案中列表的元素



如何更改方案中列表的元素。我想要一个将列表的最小元素更改为另一个数字的过程,所以

如果我有一个名为 proc 的过程,并且我给它两个参数(一个列表和一个数字),我的程序将像这样工作: (proc (list 1 2 3 1) 9)返回'(9 2 3 9) .所以 9 取代了列表的最小值。我知道我可以应用 min 来获取最小值,但我不知道如何修改列表中的单个元素。

由于 Scheme 没有变量来保存值,我想过使用 let 或 letrec,但我不知道使用 let 和 letrec 有什么区别。

这可以分为两个不同的任务 - 获取列表中的最低值,然后将该值替换为我们的新值。我们可以通过在列表上运行 sort 函数并按从最小到最大排序,然后使用 apply min 获取列表的第一个元素来获取最低值。

有了

这个,我们可以使用map来浏览列表,用我们的新数字替换任何最低数字的实例。总而言之,完整的函数应该看起来像这样:

    (define (replace-least lst new)
      (let ((lowest (apply min lst)))
        (map (lambda (x) (if (= x lowest) new x)) lst)))

我用DrRacket 5.3对此进行了测试,它按照您问题中提供的规格完美运行。如果您有任何问题,请告诉我。

这是一个

改进的工作解决方案,使用min

(define (replace-min lst elt)
  (let ((m (apply min lst)))
    (map (lambda (x) (if (= x m) elt x))
         lst)))

请注意,min是在列表中查找最小元素的最简单方法。

最新更新