Scheme function that returns the index of the first location where an element occurs in the list -
this question has answer here:
the last line of code should returns index of first location atm occurs in list. example (list-memeber? 9 '(4 9 3 6 8)) should return 2, gives me length + 1. length + 1 should work when atm doesn't occur in list. how that?
(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 empty (this part works fine) ((not (eq? atm (car lst))) (+ 1 (list-length lst))) ;if atm not occur in list, function returns length + 1 ((this works fine) ((eq? atm (car lst)) 1) ;if fisrt element equals atm, function returns location 1 (this works fine) (else (+ 1 (list-memeber? atm (cdr lst)))))) ;here i'm having problem. should return location of index atm occurs.
so returning number. can see several problems. eg. imagine don't find element in 3 element list.. turns into:
(+ 1 (+ 1 (+ 1 '()))) ; part not work fine!
i guess should 1
instead of '()
. further, if in current element don't find atm
, happens every time desired element not found in first element, (+ 1 (list-length lst))
, stop searching later in structure. general case else
never met since either matches or doesn't , else after never run.
to round fix null?
case , remove term predicate (not (eq? atm (car lst)))
working.