It seems your input data is not right here. I use your code (see below), it works well (besides the overflow problem).
#lang racket ;it is list operation though parameter is str ;as little like human, check first and last character first (define count 0) (define data (string->list "explorers")) (define (search str) (set! count 0) (define len (length str)) (define data-len (length data)) (when (and (not (= 0 len)) (>= data-len len)) (define first-char (first str)) (define last-char (last str)) ;is it exactly same? (define (exact? str len index) (newline) (display str) (newline) (display (drop (take data (+ index len)) index)) (newline) (if (equal? str (drop (take data (+ index len)) index)) #t #f)) ;if first and last character is correct, then compare whole searching string, if not, skip (define (loop [index 0]) (when (> data-len index) (if (and (equal? first-char (list-ref data index)) (display index) (newline) (display len) (newline) (display "==================") (equal? last-char (list-ref data (+ index len -1)))) (when (exact? str len index) (set! count (+ count 1)) (loop (+ index len))) (loop (+ index 1))))) (loop)) (format "Found ~a" count)) (search (string->list "explorer")) On 20 May 2011 17:51, Nevo <sakur.dea...@gmail.com> wrote: > A quick look. > You're not guarding the list end ( (+ index len - 1) should be also less > than data-len), that's why you have index overflow error. Then when you > tried to search "2explorer" from "2explorers", the first turn of loop > failed, then the second turn of loop failed on "(equal? first-char (list-ref > data index))", that's why you cannot find "2explorer". > >
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users