2012-05-09 13 views
8

Estoy tratando de obtener un elemento de una lista en un índice dado para una instrucción de ciclo.¿Cómo obtengo un elemento de una lista en un índice determinado en lenguaje de raqueta?

(define decision-tree-learning 
    (lambda (examples attribs default) 
    (cond 
     [(empty? examples) default] 
     [(same-classification? examples) (caar examples)] ; returns the classification 
     [else (lambda() 
       (let ((best (choose-attribute attributes examples)) 
        (tree (make-tree best)) 
        (m (majority-value examples)) 
        (i 0) 
        (countdown (length best)) ; starts at lengths and will decrease by 1 
        (let loop() 
        (let example-sub ; here, totally stuck now 
         ; more stuff 
         (set! countdown (- countdown 1)) 
         ; more stuff 
        )))))]))) 

En este caso, es best la lista y que necesita para obtener su valor en el índice countdown. ¿Podrías ayudarme en eso?

+0

En lugar de pasar por encima de un índice y usar 'list-ref', ¿por qué no simplemente recorre la lista directamente? –

+0

También tenga en cuenta que si se encuentra haciendo acceso aleatorio a través de la lista, entonces probablemente no sea el tipo de contenedor apropiado para sus datos. Racket (así como Scheme) proporciona el tipo * vector * que admite el acceso aleatorio de tiempo constante. http://docs.racket-lang.org/guide/vectors.html – dyoo

+0

Gracias por los comentarios. Soy muy nuevo en racket lang y aprecio todo esto. – lu1s

Respuesta

4

O construya usted mismo:

(define my-list-ref 
    (lambda (lst place) 
     (if (= place 0) 
      (car lst) 
      (my-list-ref (cdr lst) (- place 1))))) 

pero si usted quiere comprobar si la lista está hecho y Don' No te preocupes por el error, puedes hacer esto también:

(define my-list-ref 
    (lambda (lst place) 
     (if (null? lst) 
      '() 
      (if (= place 0) 
      (car lst) 
      (my-list-ref (cdr lst) (- place 1)))))) 
+0

¿Por qué reescribir lo que ya es una función integrada? –

+1

@ leo-the-manic: Fácil: comprender cómo funciona internamente y poder utilizar los conceptos en otros contextos. No lo haría en la configuración de producción, pero con fines de aprendizaje está justificado. – Zelphir

Cuestiones relacionadas