A quick look.<div>You&#39;re not guarding the list end ( (+ index len - 1) should be also less than data-len), that&#39;s why you have index overflow error. Then when you tried to search &quot;2explorer&quot; from &quot;2explorers&quot;, the first turn of loop failed, then the second turn of loop failed on &quot;(equal? first-char (list-ref data index))&quot;, that&#39;s why you cannot find &quot;2explorer&quot;.</div>
<div><br></div><div>Nevo</div><div><br><div class="gmail_quote">On 20 May 2011 16:48, 김태윤 <span dir="ltr">&lt;<a href="mailto:kty1104@gmail.com">kty1104@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
hello<br>
I am trying to make little human like text searching program<br>
but there&#39;s bug that I can&#39;t catch for many hours<br>
the bug is<br>
when text.txt file contains<br>
explorer<br>
and when I am trying to find<br>
exp<br>
then error arise<br>
when the text.txt contains<br>
explorers<br>
and the time I trying to search<br>
expl<br>
the error<br>
list-ref: index 9 too large for list: (#\e #\x #\p #\l #\o #\r #\e #\r #\s)<br>
is arise on<br>
(equal? last-char (list-ref data (+ index len -1))))<br>
but the wierd thing is that<br>
when the text.txt file contains<br>
2explorers<br>
and when I am trying to find<br>
2explorer<br>
no error arise<br>
but<br>
finding 2explorers returns 0 Found<br>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
#lang scheme/gui<br>
;it is list operation though parameter is str<br>
;as little like human, check first and last character first<br>
(define (search str)<br>
  (set! count 0)<br>
  (define len (length str))<br>
  (define data-len (length data))<br>
  (when (and (not (= 0 len)) (&gt;= data-len len))<br>
    (define first-char (first str))<br>
    (define last-char (last str))<br>
    ;is it exactly same?<br>
    (define (exact? str len index)<br>
      (if (equal? str (drop (take data (+ index len)) index))<br>
          #t<br>
          #f))<br>
    ;if first and last character is correct, then compare whole<br>
searching string, if not, skip<br>
    (define (loop [index 0])<br>
      (when (&gt; data-len index)<br>
        (if (and (equal? first-char (list-ref data index))<br>
                 (display index)<br>
                 (newline)<br>
                 (display len)<br>
                 (newline)<br>
                 (display &quot;==================&quot;)<br>
                 (equal? last-char (list-ref data (+ index len -1))))<br>
            (when (exact? str len index)<br>
              (set! count (+ count 1))<br>
              (loop (+ index len)))<br>
            (loop (+ index 1)))))<br>
    (loop))<br>
  (send msg set-label (format &quot;~a Found&quot; count)))<br>
<br>
<br>
;counting number<br>
(define count 0)<br>
;define path<br>
(define path (get-file))<br>
;convert path to port<br>
(define port (open-input-file path))<br>
(define data &#39;())<br>
;load the file to list data<br>
(define (loop [line (read-line port)])<br>
  (when (not (eof-object? line))<br>
    (set! data (append data (string-&gt;list line)))<br>
    (loop)))<br>
(loop)<br>
;search every time the text changes<br>
(define (cb-txt t e) (search (string-&gt;list (send t get-value))))<br>
;define frame<br>
(define f (new frame% (label &quot;text search&quot;) (min-width 300)))<br>
;define text field<br>
(define txt (new text-field% (label &quot;type here&quot;) (parent f) (callback<br>
(λ (t e) (cb-txt t e)))))<br>
;define message<br>
(define msg (new message% (label &quot;0 Found         &quot;) (parent f)))<br>
;show<br>
(send f show #t)<br>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
<br>
_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a></blockquote></div><br></div>