Racket,使用索引从列表中获取值

Racket,使用索引从列表中获取值,racket,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-ind

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

    #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)'(ab cc d))这将返回“3”,现在我想使用该数字在第二个函数中获得“cc”,并使用list'(aa-bb-cc-dd-ee-ff)

这些问题是:

  • 列表索引elst在第二个函数中给出了一个错误

  • 我不知道如何把这两种功能结合起来

首先,请注意,考虑位置0处的第一个元素,因此

(list-ref '(aa bb cc dd ee ff) 3)
将输出
'dd
,而不是cc

其次,
(列表索引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

或者您可以修改
列表索引
本身以输出0索引位置。

错误是因为您没有传递相同的值。什么是全局
e
?可能和你的报价单不一样。谢谢你的回答!这对我来说非常有用,不客气,如果您需要关于变量作用域的帮助,也许会有帮助。