【问题标题】:How do I get an item from a list at a given index in racket language?如何从球拍语言中给定索引的列表中获取项目?
【发布时间】:2012-05-18 09:32:29
【问题描述】:

我正在尝试从给定索引处的列表中获取一个项目以用于循环语句。

(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 索引处获取它的值。你能帮我解决这个问题吗?

【问题讨论】:

  • 与其循环遍历索引并使用list-ref,不如直接循环遍历列表?
  • 另请注意,如果您发现自己通过列表进行随机访问,那么它可能不适合您的数据的容器类型。 Racket(以及 Scheme)提供了支持恒定时间随机访问的 vector 类型。 docs.racket-lang.org/guide/vectors.html
  • 感谢 cmets。我真的是球拍语言的新手,我很感激这一切。

标签: list scheme racket


【解决方案1】:

例子:

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

见:

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

【讨论】:

    【解决方案2】:

    或者自己构建这个:

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

    【讨论】:

    • @leo-the-manic:简单:了解它在内部是如何工作的,并能够在其他上下文中使用这些概念。您不会在生产环境中这样做,但出于学习目的,这是合理的。
    猜你喜欢
    • 2020-05-21
    • 2020-06-09
    • 1970-01-01
    • 2013-06-15
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2019-01-12
    相关资源
    最近更新 更多