2012-05-09 16 views
8

Sto cercando di ottenere un elemento da un elenco in un determinato indice per un'istruzione di loop.Come posso ottenere un elemento da un elenco a un dato indice in linguaggio racket?

(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 
        )))))]))) 

In questo caso, best è la lista e ho bisogno di ottenere il suo valore in corrispondenza dell'indice countdown. Potresti aiutarmi su questo?

+0

Invece di eseguire il ciclo su un indice e utilizzare 'list-ref', perché non eseguire semplicemente il ciclo sull'elenco direttamente? –

+0

Nota inoltre che se ti trovi a fare un accesso casuale attraverso l'elenco, probabilmente non è il tipo di contenitore appropriato per i tuoi dati. Racket (oltre a Scheme) fornisce il tipo * vector * che supporta l'accesso casuale a tempo costante. http://docs.racket-lang.org/guide/vectors.html – dyoo

+0

Grazie per i commenti. Sono davvero nuovo al racket lang e apprezzo tutto questo. – lu1s

risposta

4

o costruire da soli:

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

, ma se si vuole verificare se la lista è fatto e don' ti preoccupare per errore puoi farlo anche tu:

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

Perché riscrivere ciò che è già una funzione integrata? –

+1

@ leo-the-maniac: Facile: capire come funziona internamente e poter utilizzare i concetti all'interno di altri contesti. Non lo faresti nell'impostazione di produzione, ma per motivi di apprendimento è giustificato. – Zelphir

Problemi correlati