在scheme中访问列表元素

在scheme中访问列表元素,scheme,Scheme,如何更改方案中列表的元素。 我想要一个程序,将列表中的最小元素更改为另一个数字,所以 如果我有一个名为proc的过程,我给它两个参数(一个列表和一个数字),我的过程的工作原理如下: (proc(list 1 2 3 1)9)返回”(9 2 3 9)。因此,9将取代列表中的最小值。我知道我可以应用min来获得最小值,但我不知道如何修改列表中的单个元素 由于Scheme没有变量来保存值,我考虑过使用let或letrec,但我不知道使用let和letrec的区别是什么。这可以分为两个不同的任务-获取列

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

如果我有一个名为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测试了这一点,它的性能完全符合您问题中提供的规格。如果您有任何问题,请告诉我。

这可以分为两个不同的任务-获取列表中的最低值,然后用新值替换该值。我们可以通过在列表上运行
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
是查找列表中最小元素的最简单方法。

这是一种改进的工作解决方案,使用
min

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

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

(apply min lst)
也可用于获取最小值。感谢您指出这一点。我已经更新了我的代码以反映你的建议。你也需要扔掉
汽车
;p
(apply min lst)
也可用于获取最小值。感谢您指出这一点。我已经更新了我的代码以反映你的建议。你也需要扔掉
汽车
;你什么意思,Scheme没有变量?是的,但是你应该少用。Scheme人员更喜欢返回包含新内容的新列表,而不是更改原始列表的内容。Scheme没有变量是什么意思?是的,但是你应该少用。Schemer更喜欢返回包含新内容的新列表,而不是更改原始列表的内容。