我想从列表中获取一个给出索引的元素。但该指数将通过另一个功能:
#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)在第二个函数中出错。
我不知道如何结合两种功能。
答案 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索引位置。