2012-05-09 9 views
8

Döngü ifadesi için belirli bir dizindeki listedeki bir öğeyi almaya çalışıyorum. Bu durumda Raket dilinde belirli bir dizindeki bir listeden bir öğeyi nasıl alabilirim?

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

, best liste ve ben countdown endeksine değerini almak gerekir. Bana yardım edebilir misin?

+0

Bir dizinin üzerine döngü yapmak yerine ve 'list-ref' kullanmak yerine, neden sadece doğrudan listenin üzerinden geçemezsiniz? –

+0

Ayrıca, kendinizi listede rastgele erişime sahip bulursanız, muhtemelen verileriniz için uygun bir kapsayıcı türü olmadığını unutmayın. Raket (Şemanın yanı sıra), sabit zamanlı rasgele erişmeyi destekleyen * vektör * türünü sağlar. http://docs.racket-lang.org/guide/vectors.html – dyoo

+0

Yorumlar için teşekkürler. Raket lang'da gerçekten yeniyim ve tüm bunları takdir ediyorum. – lu1s

cevap

18

Örnek:

> (list-ref '(a b c d e f) 2) 
'c 

Bkz:

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

ancak kontrol etmek istiyorsanız liste yapıldığını ve don eğer:

http://docs.racket-lang.org/reference/pairs.html

+0

Teşekkür ederim soegaard! – lu1s

4

Ya da bu kendini inşa Hata ile endişelenmek de yapabilirsiniz:

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

Niçin bir dahili işlevin neyi yeniden yazıyor? –

+1

@ leo-the-manic: Kolay: İçsel olarak nasıl çalıştığını anlamak ve kavramları diğer bağlamlarda kullanabilmek. Bunu üretim ortamında yapamazsınız, ancak öğrenme amaçlı olarak haklı çıkar. – Zelphir

İlgili konular