2012-05-09 8 views
8

私はループステートメントのための特定のインデックスのリストからアイテムを取得しようとしています。この場合ラケット言語で指定されたインデックスのリストからアイテムを取得するにはどうすればよいですか?

(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はリストであり、私はcountdownインデックスではその値を取得する必要があります。あなたは私を助けてくれますか?

+0

インデックスをループして 'list-ref'を使用する代わりに、リストを直接ループするのはなぜですか? –

+0

また、リストからランダムアクセスを行っている場合は、データの適切なコンテナタイプではない可能性があります。 Racket(と同様にScheme)は、定数時間ランダムアクセスをサポートする* vector *型を提供します。 http://docs.racket-lang.org/guide/vectors.html – dyoo

+0

コメントありがとうございます。私はラケットラングでは本当に新しいので、私はこのすべてを感謝します。 – lu1s

答えて

4

それともこれを自分で構築する:

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

ができますが、リストが行われ、ドン」しているかどうかを確認したい場合エラーで心配することもありません。

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

なぜ組み込み関数を書き直すのですか? –

+1

@ leo-the-manic:Easy:それが内部的にどのように働くのかを理解し、他のコンテキストでその概念を使用できるようにする。あなたは本番環境ではしませんが、学習目的では正当です。 – Zelphir

関連する問題