2012-05-09 31 views
8

Tôi đang cố gắng lấy một mục từ danh sách tại một chỉ mục nhất định cho một câu lệnh vòng lặp.Làm cách nào để lấy một mục từ danh sách tại một chỉ mục nhất định bằng ngôn ngữ vợt?

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

Trong trường hợp này, best là danh sách và tôi cần để có được giá trị của nó ở chỉ số countdown. Bạn có thể giúp tôi về điều đó không?

+0

Thay vì lặp qua chỉ mục và sử dụng 'danh sách-ref', tại sao không chỉ lặp lại danh sách trực tiếp? –

+0

Cũng lưu ý rằng nếu bạn thấy mình đang truy cập ngẫu nhiên thông qua danh sách, thì đó có thể không phải là loại vùng chứa thích hợp cho dữ liệu của bạn. Racket (cũng như Scheme) cung cấp kiểu * vector * hỗ trợ truy cập ngẫu nhiên theo thời gian. http://docs.racket-lang.org/guide/vectors.html – dyoo

+0

Cảm ơn nhận xét. Tôi thực sự mới ở lang lang và tôi đánh giá cao tất cả điều này. – lu1s

Trả lời

4

Hoặc xây dựng này tự hỏi:

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

nhưng nếu bạn muốn kiểm tra xem danh sách được thực hiện và don' Đừng lo lắng bởi lỗi yo cũng có thể làm điều này:

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

Tại sao lại viết lại chức năng dựng sẵn là gì? –

+1

@ leo-the-hưng: Dễ dàng: Để hiểu cách hoạt động bên trong và để có thể sử dụng các khái niệm trong các ngữ cảnh khác. Bạn sẽ không làm điều đó trong môi trường sản xuất, nhưng vì mục đích học tập, nó là hợp lý. – Zelphir

Các vấn đề liên quan