2017-04-12 42 views
0

我想从给出索引的列表中获取元素。但该指数将得到低谷的另一个功能:球拍,使用索引从列表中获取值

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

例子: 如果我执行:(名单指数“(C)”(ABCD)),这将返回‘3’,现在我想用这个数字在列表'(aa bb cc dd ee ff)中获得第二个函数中的“cc”。

的问题是:

  • 的(列表指数E LST)在第二功能给了一个错误。

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

+0

错误是因为您没有传递相同的值。什么是全球“e”?可能是不一样的你的引用清单.. – Sylwester

回答

0

首先,请注意list-ref认为第一元件在位置0,所以

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

将输出'dd,不立方厘米

其次,由于两个ËLST是表达内未定义/未结合的变量(list-index 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度位置。

+0

谢谢你的答案!它对我来说非常有用 –

+0

不客气,如果你需要变量作用域的帮助,可能[this](https://cscircles.cemc.uwaterloo.ca/11b-how-functions-work/)或[这](https://www.wikiwand.com/en/Scope_(computer_science))将会有所帮助。 – assefamaru