2011-03-19 47 views
1

,所以我想从列表中的前指数:试图从列表中得到一个元素的索引方案

(GET-指数“G(名单” A“G” T“X 'I' T 'G))

(2 7)

其中索引从1开始,从而' A是索引一个

我想上使用辅助功能,其中它采用ELT LST和索引 ex:(get-indices-helper el 1st index)

我也在考虑可能使用list-ref并将其切换为使其以get索引方式工作,但我无法找到它的实际方案定义。

回答

3

编写一个递归递减输入列表的函数,跟踪它正在查看的元素的位置,并发出与cons匹配的索引。这真是微不足道的;我认为这是你被定为功课的问题?

; Walk down the list given in haystack, returning a list of indices at which 
; values equal? to needle appear. 
(define (get-indices needle haystack) 
    ; Loop along the haystack. 
    (define (loop rest-of-haystack index) 
    ; If the haystack is empty, return the empty list. 
    (if (null? rest-of-haystack) '() 
     ; Recurse to the next position in the list. 
     (let ((rest-of-indices (loop (cdr rest-of-haystack) (+ index 1)))) 
     (if (equal? (car rest-of-haystack) needle) 
      ; If haystack is here, emit the current index. 
      (cons index rest-of-indices) 
      ; Otherwise, return rest-of-indices. 
      rest-of-indices)))) 
    ; Run the loop defined above, from the beginning of haystack, with 
    ; the first element being assigned an index of 1. 
    (loop haystack 1)) 

测试这与GNU狡诈或使用MzScheme什么:

(display (get-indices 'G (list 'A 'G 'T 'X 'I 'T 'G))) (newline) 
(display (get-indices 1 (list 1 1 1 2 1 3))) (newline) 

打印:

(2 7) 
(1 2 3 5) 

耶!

相关问题