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在第二个函数中给出了一个错误
- 我不知道如何把这两种功能结合起来
(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
?可能和你的报价单不一样。谢谢你的回答!这对我来说非常有用,不客气,如果您需要关于变量作用域的帮助,也许会有帮助。