Racket,使用索引

时间:2017-04-12 09:09:54

标签: racket

我想从列表中获取一个给出索引的元素。但该指数将通过另一个功能:

    #lang racket

(define (list-index e lst)
    (if (null? lst)
        0
        (if (equal? (car lst) (car e))
            1
            (+ 1 (list-index e (cdr lst))))))


(list-ref '(aa bb cc dd ee ff) (list-index e lst))

实施例: 如果我执行:(list-index'(c)'(a b c d))这将返回" 3"现在我想用这个数字得到" cc"列表中的第二个功能'(aa bb cc dd ee ff)。

问题是:

  • (list-index e lst)在第二个函数中出错。

  • 我不知道如何结合两种功能。

1 个答案:

答案 0 :(得分:0)

首先,请注意here考虑​​位置0的第一个元素,所以

(list-ref '(aa bb cc dd ee ff) 3)

会输出'dd,而不是 cc

其次,(list-index e lst)产生错误,因为 e lst 都是表达式中未定义/未绑定的变量。要应用过程(或一般的任何函数),您必须将实际值或绑定到范围内的值的标识符传递给它。例如,以下内容将起作用并输出'dd

> (list-ref '(aa bb cc dd ee ff) (list-index '(c) '(a b c d)))
'dd

要输出 cc ,您可以

(list-ref '(aa bb cc dd ee ff) (sub1 (list-index '(c) '(a b c d))))
'cc

或者您可以修改list-index本身以输出0索引位置。