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