我的代码的最后一行应该返回列表中出现atm的第一个位置的索引。例如(list-memeber?9'(4 9 3 6 8))应该返回2,但它给我长度+ 1.长度+ 1只应在列表中没有出现atm时起作用。我怎么能这样做?
(define (list-length l)
(if (null? l)
0
(+ 1 (list-length (cdr l)))))
(define (list-memeber? atm lst)
(cond
((null? lst) '() ) ;returns null if list is empty (This part works fine)
((not (eq? atm (car lst))) (+ 1 (list-length lst))) ;If atm does not occur in the list, the function returns length + 1 ((This works fine)
((eq? atm (car lst)) 1) ;if fisrt element equals atm, function returns location which is 1 (This also works fine)
(else (+ 1 (list-memeber? atm (cdr lst)))))) ;here is where I'm having problem. This should return location of index where atm occurs.
答案 0 :(得分:0)
所以你要回一个号码。我可以看到几个问题。例如。想象一下,你没有在3元素列表中找到你的元素。它变成了:
(+ 1 (+ 1 (+ 1 '()))) ; this part does not work fine!
我想它应该是1
而不是'()
。此外,如果您在当前元素中找不到atm
,每次在第一个元素中找不到所需元素时都会发生(+ 1 (list-length lst))
,您执行else
并在以后有效地停止搜索结构体。因此,一般情况null?
永远不会满足,因为它匹配或不匹配,之后的其他东西永远不会运行。
要整理修复(not (eq? atm (car lst)))
案例,并使用谓词{{1}}删除该字词,以使某些工作有效。