[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/XanMzASO    [ raw code | fork ]

programmingpraxis - Scheme, pasted on Aug 19:
; string search -- brute force method

(define-syntax assert
  (syntax-rules ()
    ((assert expr result)
      (if (not (equal? expr result))
          (for-each display `(
            #\newline "failed assertion:" #\newline
            expr #\newline "expected: " ,result
            #\newline "returned: " ,expr #\newline))))))

(define (bf-search pat str . s)
  (let ((plen (string-length pat)) (slen (string-length str)))
    (let loop ((p 0) (s (if (null? s) 0 (car s))))
      (cond ((= p plen) (- s plen))
            ((= s slen) #f)
            ((char=? (string-ref pat p) (string-ref str s))
              (loop (+ p 1) (+ s 1)))
            (else (loop 0 (- s p -1)))))))

(define (test-search search)
  (assert (search "Programming Praxis" "Programming Praxis") 0)
  (assert (search "Praxis" "Programming Praxis") 12)
  (assert (search "Prax" "Programming Praxis") 12)
  (assert (search "praxis" "Programming Praxis") #f)
  (assert (search "P" "Programming Praxis") 0)
  (assert (search "P" "Programming Praxis" 5) 12)
)

(test-search bf-search)


Output:
No errors or program output.


Create a new paste based on this one


Comments: