중급 학생 언어 목록에서 값의 위치 목록을 가져 오려고합니다.DrRacket : 목록에서 값의 위치를 얻는 방법
는 예를 들어 내가 당신을주지
(list false A false false false false A false false false)
출력은해야 뭔가
(list 1 6)
중급 학생 언어 목록에서 값의 위치 목록을 가져 오려고합니다.DrRacket : 목록에서 값의 위치를 얻는 방법
는 예를 들어 내가 당신을주지
(list false A false false false false A false false false)
출력은해야 뭔가
(list 1 6)
처럼 다음 목록에서 값 "A"에 대한 위치의 목록을 기원합니다 이 문제를 해결하기위한 몇 가지 힌트가 있습니다. 솔루션을 직접 구현하면 훨씬 좋습니다. 강제에 공백 다음 idx
매개 변수는 우리가 0부터 시작하여 현재에 걸쳐있어 인덱스를 추적 할 필요가
; position procedure
; lst: input list
; ele: the searched element
; idx: initial index, starts in 0
(define (position lst ele idx)
(cond (<???> ; if the input list is empty
<???>) ; then we're done, return the empty list
(<???> ; if the current element equals the one we're looking then
(cons <???> ; build output list, cons the index where we found it
(position <???> ele <???>))) ; and advance the recursion
(else ; otherwise
(position <???> ele <???>)))) ; just advance the recursion
공지있다. 재귀가 진행되면 입력 목록과 색인을 모두 향상시켜야합니다. 절차 테스트하는 것을 잊지 마세요 :
(position '(false A false false false false A false false false) 'A 0)
=> '(1 6)
그럼 우리가 신속하게 이해할 수있는 몇 가지가 있습니다를, 첫 번째는 당신이 당신의 초기 목록을 재귀해야 할 거라고이고, 두 번째는 것입니다 누적 계산기 목록을 유지해야 할 것이고, 당신이보고있는 첫 번째 목록의 어떤 요소에 대한 개념을 가지고 있기 때문에 우리는 또한 카운터를 추가 할 수 있습니다.
그래서 카운터가 존재해야하기 때문에
; listsearch : (listof Any) Any -> (listof Int)
; Searches a list for val and returns a list of indexes for occurrences of val in lst
; (listsearch '(1 2 1 3 4 1) 1) => '(0 2 5)
(define (listsearch lst val)
(local [(define (helper lst acc counter)
(cond [(empty? lst) acc]
[(equal? val (first lst)) (helper (rest lst)
(cons counter acc)
(add1 counter))]
[else (helper (rest lst) acc (add1 counter))]))]
(reverse (helper lst empty 0))))
나는 지역을 추가 한, 그러나 우리는 실제 기능은 깔끔한되고 싶어요, 그래서 전화는 단순히 목록과 값을 필요로한다.
이것은 단순히 목록 하나 하나를 통과, 3 확인
이렇게하면 거꾸로 목록이 만들어 지므로 끝에 반대로 표시됩니다.
그게 전부 야! :)
이미 시도한 코드와 그 결과 (예 : 오류 (포함)), 예상 결과 (예상 오류 포함) 등)를 포함해야합니다. – Michelle