我是计划的初学者,我想知道如何在列表中找到元素的位置。例如,在此给定列表中,
(list 1 2 13)
我发现使用累积递归的最大值,但我还需要找到最大值的位置,所以如果函数是:
(max-with-location (list 1 2 13)), I need to get: (list 13 (list 3))
请帮帮我。
答案 0 :(得分:3)
这听起来像是家庭作业,如果是这种情况,那么任何这些解决方案都无济于事。您可能期望做的是修改您编写的代码以找到最大值:而不是单个累加器输入到循环,再添加一个用于最大值的位置。鉴于您已经实施了max
。
答案 1 :(得分:1)
我不使用Scheme,但在CL中它是(position 13 (list 1 2 13))
也许它是一样的......
所以对于你的代码,你需要这样的东西:
(list (max (list 1 2 13)) (position (max (list 1 2 13)))
将返回(13 2)
编辑:max应该是你的最大算法,虽然我想可能已经有了这个
的函数double edit:如果仍然不起作用,你总是可以使用一个计数器,每次递增递归函数,然后返回...
答案 2 :(得分:1)
首先你必须确定最大数量:
(define max_list1
(lambda (l)
(cond
((empty? (rest l)) l)
(else (max_aux_list (first l) (rest l))))))
(define (max_aux_list n lista)
(cond
((empty? lista) n)
((> n (first lista)) (max_aux_list n (rest lista)))
(else (max_aux_list (first lista) (rest lista)))))
然后你必须计算一个元素的位置编号。
(define find_in_position
(lambda (n lista)
(cond
((empty? lista) 0)
((= n (first lista)) 1)
(else (+ 1 (find_in_position n (rest lista)))))))
最后,列出两个结果。
答案 3 :(得分:1)
这应该可以解决问题:
(define (find-position list element #!optional (pred eq?))
(letrec ((loop (lambda (list count)
(if (null? list) #f ;No such element found
(if (pred (car list) element) count
(loop (cdr list) (+ count 1)))))))
(loop list 0)))
(define (find-position list element #!optional (pred eq?))
(letrec ((loop (lambda (list count)
(if (null? list) #f ;No such element found
(if (pred (car list) element) count
(loop (cdr list) (+ count 1)))))))
(loop list 0)))
然后:
(find-position (list 1 3 13) 13)
>>> 2
答案 4 :(得分:0)
像这样使用list-ref:
(define tlist '(a b c d))
(list-ref tlist 2)
>> c